class HTTPI::Adapter::Curb

HTTPI::Adapter::Curb

Adapter for the Curb client. rubygems.org/gems/curb

Public Class Methods

new(request = nil) click to toggle source
# File lib/httpi/adapter/curb.rb, line 12
def initialize(request = nil)
end

Public Instance Methods

client() click to toggle source

Returns a memoized Curl::Easy instance.

# File lib/httpi/adapter/curb.rb, line 16
def client
  @client ||= Curl::Easy.new
end
delete(request) click to toggle source

Executes an HTTP DELETE request. @see HTTPI.delete

# File lib/httpi/adapter/curb.rb, line 46
def delete(request)
  do_request(request) { |client| client.http_delete }
end
get(request) click to toggle source

Executes an HTTP GET request. @see HTTPI.get

# File lib/httpi/adapter/curb.rb, line 22
def get(request)
  do_request(request) { |client| client.http_get }
end
head(request) click to toggle source

Executes an HTTP HEAD request. @see HTTPI.head

# File lib/httpi/adapter/curb.rb, line 34
def head(request)
  do_request(request) { |client| client.http_head }
end
post(request) click to toggle source

Executes an HTTP POST request. @see HTTPI.post

# File lib/httpi/adapter/curb.rb, line 28
def post(request)
  do_request(request) { |client| client.http_post request.body }
end
put(request) click to toggle source

Executes an HTTP PUT request. @see HTTPI.put

# File lib/httpi/adapter/curb.rb, line 40
def put(request)
  do_request(request) { |client| client.http_put request.body }
end

Private Instance Methods

basic_setup(request) click to toggle source
# File lib/httpi/adapter/curb.rb, line 64
def basic_setup(request)
  client.url = request.url.to_s
  client.proxy_url = request.proxy.to_s if request.proxy
  client.timeout = request.read_timeout if request.read_timeout
  client.connect_timeout = request.open_timeout if request.open_timeout
  client.headers = request.headers.to_hash
  client.verbose = false
end
do_request(request) { |client| ... } click to toggle source
# File lib/httpi/adapter/curb.rb, line 52
def do_request(request)
  setup_client request
  yield client
  respond_with client
end
parse_header_string(header_string) click to toggle source

Borrowed from Webmock's Curb adapter: github.com/bblimke/webmock/blob/master/lib/webmock/http_lib_adapters/curb.rb

# File lib/httpi/adapter/curb.rb, line 93
def parse_header_string(header_string)
  status, headers = nil, {}
  return [status, headers] unless header_string

  header_string.split(/\r\n/).each do |header|
    if header =~ %r|^HTTP/1.[01] \d\d\d (.*)|
      status = $1
    else
      parts = header.split(':', 2)
      unless parts.empty?
        parts[1].strip! unless parts[1].nil?
        if headers.has_key?(parts[0])
          headers[parts[0]] = [headers[parts[0]]] unless headers[parts[0]].kind_of? Array
          headers[parts[0]] << parts[1]
        else
          headers[parts[0]] = parts[1]
        end
      end
    end
  end

  [status, headers]
end
respond_with(client) click to toggle source
# File lib/httpi/adapter/curb.rb, line 86
def respond_with(client)
  status, headers = parse_header_string(client.header_str)
  Response.new client.response_code, headers, client.body_str
end
setup_client(request) click to toggle source
# File lib/httpi/adapter/curb.rb, line 58
def setup_client(request)
  basic_setup request
  setup_http_auth request if request.auth.http?
  setup_ssl_auth request.auth.ssl if request.auth.ssl?
end
setup_http_auth(request) click to toggle source
# File lib/httpi/adapter/curb.rb, line 73
def setup_http_auth(request)
  client.http_auth_types = request.auth.type
  client.username, client.password = *request.auth.credentials
end
setup_ssl_auth(ssl) click to toggle source
# File lib/httpi/adapter/curb.rb, line 78
def setup_ssl_auth(ssl)
  client.cert_key = ssl.cert_key_file
  client.cert = ssl.cert_file
  client.cacert = ssl.ca_cert_file if ssl.ca_cert_file
  client.certtype = ssl.cert_type.to_s.upcase
  client.ssl_verify_peer = ssl.verify_mode == :peer
end