class Rester::Client::Adapters::HttpAdapter::Connection

Constants

DEFAULT_DATA_HEADERS

Attributes

timeout[R]
url[R]

Public Class Methods

new(url, opts={}) click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 15
def initialize(url, opts={})
  @url = url.is_a?(String) ? URI(url) : url
  @url.path = @url.path[0..-2] if @url.path[-1] == '/'
  @timeout = opts[:timeout]
end

Public Instance Methods

request(verb, path, params={}) click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 21
def request(verb, path, params={})
  _request(
    verb,
    _path(path, params[:query]),
    _headers(verb, params[:headers]),
    params[:data]
  )
end

Private Instance Methods

_headers(verb, headers) click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 45
def _headers(verb, headers)
  if [:post, :put].include?(verb)
    _prepare_data_headers(headers)
  else
    _prepare_headers(headers)
  end
end
_http() click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 57
def _http
  Net::HTTP.new(url.hostname, url.port).tap { |http|
    if (http.use_ssl=url.is_a?(URI::HTTPS))
      http.verify_mode = OpenSSL::SSL::VERIFY_PEER

      http.cert_store = OpenSSL::X509::Store.new.tap { |s|
        s.set_default_paths
      }
    end

    http.open_timeout = http.read_timeout = timeout
  }
end
_path(path, query=nil) click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 38
def _path(path, query=nil)
  u = url.dup
  u.path = Utils.join_paths(u.path, path)
  u.query = query if query
  u.request_uri
end
_prepare_data_headers(headers) click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 53
def _prepare_data_headers(headers)
  DEFAULT_DATA_HEADERS.merge(_prepare_headers(headers))
end
_prepare_headers(headers) click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 71
def _prepare_headers(headers)
  Hash[(headers || {}).map { |k, v| [k.to_s, v.to_s] }]
end
_request(verb, path, headers, data) click to toggle source
# File lib/rester/client/adapters/http_adapter/connection.rb, line 32
def _request(verb, path, headers, data)
  _http.public_send(verb, *[path, data, headers].compact)
rescue Net::ReadTimeout, Net::OpenTimeout
  fail Errors::TimeoutError
end