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



28
29
30
31
32
33
34
35
36
# File 'lib/quickpay/api/request.rb', line 28

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



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

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
# File 'lib/quickpay/api/request.rb', line 12

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

  options = case method
            when :get, :delete
              { query: data }
            when :post, :patch, :put
              { body: data }
            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