class Artifice::Excon::Connection

Public Class Methods

endpoints() click to toggle source
# File lib/artifice/excon.rb, line 73
def endpoints
  @endpoints ||= {}
end

Public Instance Methods

request_kernel(params) click to toggle source
Calls superclass method
# File lib/artifice/excon.rb, line 78
def request_kernel(params)
  endpoint = self.class.endpoints[params[:host]] ||
    self.class.endpoints[:default]
  return super unless endpoint

  rack_request = RackRequest.new(endpoint)

  params[:headers].each do |header, value|
    rack_request.header(header, value)
  end if params[:headers]

  request = "#{params[:scheme]}://#{params[:host]}:#{params[:port]}"
  request << params[:path]
  request << query_string(params[:query])

  response = rack_request.request(request,
    { :method => params[:method], :input => params[:body] })

  response = ::Excon::Response.new(:body => response.body,
    :headers => response.headers, :status => response.status)

  if params.has_key?(:expects) && ![*params[:expects]].include?(response.status)
    raise(::Excon::Errors.status_error(params, response))
  end

  response
end

Private Instance Methods

query_string(query) click to toggle source
# File lib/artifice/excon.rb, line 108
def query_string(query)
  query_string = ""
  case query
  when String
    query_string << '?' << query
  when Hash
    query_string << '?'
    query.each do |key, values|
      if values.nil?
        query_string << key.to_s << '&'
      else
        [*values].each do |value|
          query_string << key.to_s << '=' << CGI.escape(value.to_s) << '&'
        end
      end
    end
    query_string.chop! # remove trailing '&'
  end
  query_string
end