Class: QuickPay::API::Request

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/quickpay/api/request.rb

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Request

Returns a new instance of Request.



7
8
9
10
# File 'lib/quickpay/api/request.rb', line 7

def initialize (options = {})
  @secret = options[:secret]
  self.class.base_uri(options[:base_uri] || BASE_URI)
end

Instance Method Details

#create_response(raw, res) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/quickpay/api/request.rb', line 31

def create_response raw, res
  if raw
    [res.code, res.body, res.headers]
  else
    response = res.parsed_response
    raise_error(response, res.code) if res.code >= 400
    response
  end
end

#raise_error(body, status) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/quickpay/api/request.rb', line 41

def raise_error body, status
  code = API_STATUS_CODES[status].to_s
  args = [code, status, body]

  klass =
    begin
      require "quickpay/api/errors/#{code}"
      class_name = code.split('_').map(&:capitalize).join('')
      QuickPay::API.const_get(class_name)
    rescue LoadError, NameError
      QuickPay::API::Error
    end

  fail klass.new(*args), error_description(body)
end

#request(method, path, data = {}) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/quickpay/api/request.rb', line 12

def request method, path, data = {}
  raw = data.delete(:raw)
  req_headers = headers.merge(data.delete(:headers) || {})

  case method
  when :get, :delete
    options = { query: data }
  when :post, :patch, :put
    options = { body: data.to_json }
    req_headers["Content-Type"] = "application/json"
  else
    options = {}
  end

  options = options.merge(:headers => headers.merge(req_headers))
  QuickPay.logger.debug { "#{method.to_s.upcase} #{base_uri}#{path} #{options}" }
  create_response(raw, self.class.send(method, path, options))
end