Class: HasOffersV3::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/hasoffersv3/client.rb,
lib/hasoffersv3/testing.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ Client

Returns a new instance of Client.



10
11
12
# File 'lib/hasoffersv3/client.rb', line 10

def initialize(configuration)
  @configuration = configuration
end

Instance Attribute Details

#configurationObject

Returns the value of attribute configuration.



8
9
10
# File 'lib/hasoffersv3/client.rb', line 8

def configuration
  @configuration
end

Instance Method Details

#base_uriObject



69
70
71
# File 'lib/hasoffersv3/client.rb', line 69

def base_uri
  configuration.base_uri
end

#build_request_params(method, params) ⇒ Object



45
46
47
48
49
50
51
52
# 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) ⇒ Object



41
42
43
# File 'lib/hasoffersv3/client.rb', line 41

def execute_request(net_http, raw_request)
  net_http.request raw_request
end

#new_http(uri) ⇒ Object



60
61
62
63
64
65
66
67
# 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_requestObject



40
41
42
# File 'lib/hasoffersv3/testing.rb', line 40

def execute_request(net_http, raw_request)
  net_http.request raw_request
end

#query_string(data_hash) ⇒ Object



54
55
56
57
58
# 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) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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