module Excon

def stub(request_params = {}, response_params = nil, &block)

Parameters:
  • response_params (Hash) -- response params to return from matched request or block to call with params
  • request_params (Hash) -- request params to match against, omitted params match all
def stub(request_params = {}, response_params = nil, &block)
  if method = request_params.delete(:method)
    request_params[:method] = method.to_s.downcase.to_sym
  end
  if url = request_params.delete(:url)
    uri = URI.parse(url)
    request_params = {
      :host              => uri.host,
      :path              => uri.path,
      :port              => uri.port,
      :query             => uri.query,
      :scheme            => uri.scheme
    }.merge!(request_params)
    if uri.user || uri.password
      request_params[:headers] ||= {}
      user, pass = Utils.unescape_form(uri.user.to_s), Utils.unescape_form(uri.password.to_s)
      request_params[:headers]['Authorization'] ||= 'Basic ' + ["#{user}:#{pass}"].pack('m').delete(Excon::CR_NL)
    end
  end
  if request_params.has_key?(:headers)
    headers = Excon::Headers.new
    request_params[:headers].each do |key, value|
      headers[key] = value
    end
    request_params[:headers] = headers
  end
  if block_given?
    if response_params
      raise(ArgumentError.new("stub requires either response_params OR a block"))
    else
      stub = [request_params, block]
    end
  elsif response_params
    stub = [request_params, response_params]
  else
    raise(ArgumentError.new("stub requires either response_params OR a block"))
  end
  stubs.unshift(stub)
  stub
end