class HasOffersV3::Client

Attributes

configuration[RW]

Public Class Methods

new(configuration) click to toggle source
# File lib/hasoffersv3/client.rb, line 10
def initialize(configuration)
  @configuration = configuration
end

Public Instance Methods

base_uri() click to toggle source
# File lib/hasoffersv3/client.rb, line 69
def base_uri
  configuration.base_uri
end
build_request_params(method, params) click to toggle source
# File lib/hasoffersv3/client.rb, line 45
def build_request_params(method, params)
  params['Method'] = method
  {
    NetworkId: configuration.network_id,
    NetworkToken: configuration.api_key,
    api_key: configuration.api_key
  }.merge(params)
end
execute_request(net_http, raw_request) click to toggle source
# File lib/hasoffersv3/client.rb, line 41
def execute_request(net_http, raw_request)
  net_http.request raw_request
end
Also aliased as: original_execute_request
new_http(uri) click to toggle source
# File lib/hasoffersv3/client.rb, line 60
def new_http(uri)
  args = [uri.host, uri.port]
  args += [configuration.proxy_host, configuration.proxy_port] if configuration.proxy_host
  http = Net::HTTP.new(*args)
  http.use_ssl = true if uri.scheme == 'https'
  http.read_timeout = configuration.read_timeout
  http
end
original_execute_request(net_http, raw_request)
Alias for: execute_request
query_string(data_hash) click to toggle source
# File lib/hasoffersv3/client.rb, line 54
def query_string(data_hash)
  # Rails to_params adds an extra open close brackets to multi-dimensional array parameters which
  # hasoffers doesn't like, so the gsub here takes care of that.
  data_hash.to_param.gsub(/\[\]\[/,'[')
end
request(http_method, target, method, params) click to toggle source
# File lib/hasoffersv3/client.rb, line 14
def request(http_method, target, method, params)
  data = build_request_params(method, params)

  target_uri = "#{base_uri}/#{target}.json"

  if http_method == :post
    uri               = URI.parse(target_uri)
    http              = new_http(uri)
    raw_request       = Net::HTTP::Post.new(uri.request_uri)
    raw_request.body  = query_string data
  else # assume get
    uri               = URI.parse("#{target_uri}?#{query_string(data)}")
    http              = new_http(uri)
    raw_request       = Net::HTTP::Get.new(uri.request_uri)
  end

  logger.log_request(raw_request, uri)

  http_response = execute_request(http, raw_request)

  logger.log_response(http_response)

  with_error_detection do
    Response.new(http_response, @configuration.json_driver)
  end
end

Private Instance Methods

logger() click to toggle source
# File lib/hasoffersv3/client.rb, line 75
def logger
  configuration.http_logger
end
with_error_detection() { || ... } click to toggle source
# File lib/hasoffersv3/client.rb, line 79
def with_error_detection
  response = yield
  return response unless configuration.raise_errors

  raise HTTPError.from_response(response) unless response.http_ok?
  raise APIError.from_response(response) unless response.status_ok?

  response
end