class HTTPI::Adapter::NetHTTP

HTTPI::Adapter::NetHTTP

Adapter for the Net::HTTP client. ruby-doc.org/stdlib/libdoc/net/http/rdoc/

Attributes

client[RW]

Public Class Methods

new(request) click to toggle source
# File lib/httpi/adapter/net_http.rb, line 13
def initialize(request)
  self.client = new_client request
end

Public Instance Methods

delete(request) click to toggle source

Executes an HTTP DELETE request. @see HTTPI.delete

# File lib/httpi/adapter/net_http.rb, line 55
def delete(request)
  do_request :delete, request do |http, delete|
    http.request delete
  end
end
get(request) click to toggle source

Executes an HTTP GET request. @see HTTPI.get

# File lib/httpi/adapter/net_http.rb, line 21
def get(request)
  do_request :get, request do |http, get|
    http.request get
  end
end
head(request) click to toggle source

Executes an HTTP HEAD request. @see HTTPI.head

# File lib/httpi/adapter/net_http.rb, line 38
def head(request)
  do_request :head, request do |http, head|
    http.request head
  end
end
post(request) click to toggle source

Executes an HTTP POST request. @see HTTPI.post

# File lib/httpi/adapter/net_http.rb, line 29
def post(request)
  do_request :post, request do |http, post|
    post.body = request.body
    http.request post
  end
end
put(request) click to toggle source

Executes an HTTP PUT request. @see HTTPI.put

# File lib/httpi/adapter/net_http.rb, line 46
def put(request)
  do_request :put, request do |http, put|
    put.body = request.body
    http.request put
  end
end

Private Instance Methods

do_request(type, request) { |http, request_client(type, request)| ... } click to toggle source
# File lib/httpi/adapter/net_http.rb, line 71
def do_request(type, request)
  setup_client request
  setup_ssl_auth request.auth.ssl if request.auth.ssl?

  respond_with(client.start do |http|
    yield http, request_client(type, request)
  end)
end
new_client(request) click to toggle source
# File lib/httpi/adapter/net_http.rb, line 65
def new_client(request)
  proxy_url = request.proxy || URI("")
  proxy = Net::HTTP::Proxy(proxy_url.host, proxy_url.port, proxy_url.user, proxy_url.password)
  proxy.new request.url.host, request.url.port
end
request_client(type, request) click to toggle source
# File lib/httpi/adapter/net_http.rb, line 93
def request_client(type, request)
  request_class = case type
    when :get    then Net::HTTP::Get
    when :post   then Net::HTTP::Post
    when :head   then Net::HTTP::Head
    when :put    then Net::HTTP::Put
    when :delete then Net::HTTP::Delete
  end

  request_client = request_class.new request.url.request_uri, request.headers
  request_client.basic_auth *request.auth.credentials if request.auth.basic?

  request_client
end
respond_with(response) click to toggle source
# File lib/httpi/adapter/net_http.rb, line 108
def respond_with(response)
  headers = response.to_hash
  headers.each { |key, value| headers[key] = value[0] }
  Response.new response.code, headers, response.body
end
setup_client(request) click to toggle source
# File lib/httpi/adapter/net_http.rb, line 80
def setup_client(request)
  client.use_ssl = request.ssl?
  client.open_timeout = request.open_timeout if request.open_timeout
  client.read_timeout = request.read_timeout if request.read_timeout
end
setup_ssl_auth(ssl) click to toggle source
# File lib/httpi/adapter/net_http.rb, line 86
def setup_ssl_auth(ssl)
  client.key = ssl.cert_key
  client.cert = ssl.cert
  client.ca_file = ssl.ca_cert_file if ssl.ca_cert_file
  client.verify_mode = ssl.openssl_verify_mode
end