Class: Payg::Request

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

Overview

Request objects are used to create fetch objects, which make requests to the server using HTTParty

Instance Method Summary collapse

Constructor Details

#initialize(entity_name = nil) ⇒ Request

Returns a new instance of Request.



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

def initialize(entity_name = nil)
  self.class.base_uri(Payg::BASE_URI)
  @entity_name = entity_name

  headers = {
    'User-Agent' => "Payg-Ruby/#{Payg::VERSION}; Ruby/#{RUBY_VERSION}",
    'Authorization' => "basic #{Payg::Utility.base64_encode}",
    'Content-Type' => 'application/json'
  }
  # Order is important to give precedence to predefined headers
  
  @options = {
    timeout: 30,
    headers: headers
  }
end

Instance Method Details

#create_instance(res) ⇒ Object

Recursively builds entity instances out of all hashes in the response object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/payg/request.rb', line 72

def create_instance(res)
  response = res.parsed_response

  if response.is_a?(Array)==true || response.to_s.length == 0
    return response
  end 
  
  # if there was an error, throw it
  raise_error(response['error'], res.code) if response.nil? || response.key?('error') && res.code !=200
  # There must be a top level entity
  # This is either one of order, refund, or collection at present
  begin
    class_name = response['entity'].split('_').collect(&:capitalize).join
    klass = Payg.const_get class_name
  rescue NameError
    # Use Entity class if we don't find any
    klass = Payg::Entity
  end
  klass.new(response)
end

#delete(url) ⇒ Object



38
39
40
# File 'lib/payg/request.rb', line 38

def delete(url)
  request :delete, "/#{@entity_name}/#{url}"
end

#get(url, data = {}) ⇒ Object



34
35
36
# File 'lib/payg/request.rb', line 34

def get(url, data = {})
  request :get, "/#{@entity_name}/#{url}", data
end

#make_test_requestObject

Since we need to change the base route



66
67
68
# File 'lib/payg/request.rb', line 66

def make_test_request
  self.class.get Payg::TEST_URL, @options
end

#patch(id, data = {}) ⇒ Object



46
47
48
# File 'lib/payg/request.rb', line 46

def patch(id, data = {})
  request :patch, "/#{@entity_name}/#{id}", data
end

#post(url, data = {}) ⇒ Object



30
31
32
# File 'lib/payg/request.rb', line 30

def post(url, data = {})
  request :post, "/#{@entity_name}/#{url}", data
end

#put(id, data = {}) ⇒ Object



42
43
44
# File 'lib/payg/request.rb', line 42

def put(id, data = {})
  request :put, "/#{@entity_name}/#{id}", data
end

#raise_error(error, status) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/payg/request.rb', line 93

def raise_error(error, status)
  # Get the error class name, require it and instantiate an error
  class_name = error['code'].split('_').map(&:capitalize).join('')
  args = [error['code'], status]
  args.push error['field'] if error.key?('field')
  require "payg/errors/#{error['code'].downcase}"
  klass = Payg.const_get(class_name)
  raise klass.new(*args), error['description']
rescue NameError, LoadError
  # We got an unknown error, cast it to Error for now
  raise Payg::Error.new, 'Unknown Error'
end

#raw_request(method, url, data = {}) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/payg/request.rb', line 54

def raw_request(method, url, data = {}) 
  case method
  when :get
    @options[:query] = data
  when :post, :put, :patch
    @options[:body] = data
  end
  
  self.class.send(method, url, @options)
end

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



50
51
52
# File 'lib/payg/request.rb', line 50

def request(method, url, data = {})
  create_instance raw_request(method, url, data)
end