Class: Razorpay::Request

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/razorpay/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.



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

def initialize(entity_name = nil)
  self.class.base_uri(Razorpay::BASE_URI)
  @entity_name = entity_name
  custom_headers = Razorpay.custom_headers || {}
  predefined_headers = {
    'User-Agent' => "Razorpay-Ruby/#{Razorpay::VERSION}; Ruby/#{RUBY_VERSION}"
  }
  # Order is important to give precedence to predefined headers
  headers = custom_headers.merge(predefined_headers)
  @options = {
    basic_auth: Razorpay.auth,
    timeout: 30,
    headers: headers
  }
end

Instance Method Details

#all(options) ⇒ Object



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

def all(options)
  request :get, "/#{@entity_name}", options
end

#create(data) ⇒ Object



54
55
56
# File 'lib/razorpay/request.rb', line 54

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

#create_instance(res) ⇒ Object

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



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/razorpay/request.rb', line 80

def create_instance(res)
  response = res.parsed_response

  # if there was an error, throw it
  raise_error(response['error'], res.code) if response.nil? || response.key?('error')

  # There must be a top level entity
  # This is either one of payment, refund, or collection at present
  begin
    class_name = response['entity'].split('_').collect(&:capitalize).join

    klass = Razorpay.const_get class_name
  rescue NameError
    # Use Entity class if we don't find any
    klass = Razorpay::Entity
  end
  klass.new(response)
end

#fetch(id) ⇒ Object



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

def fetch(id)
  request :get, "/#{@entity_name}/#{id}"
end

#get(url) ⇒ Object



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

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

#make_test_requestObject

Since we need to change the base route



74
75
76
# File 'lib/razorpay/request.rb', line 74

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

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



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

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

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



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

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

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



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

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

#raise_error(error, status) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/razorpay/request.rb', line 99

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 "razorpay/errors/#{error['code'].downcase}"
  klass = Razorpay.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 Razorpay::Error.new, 'Unknown Error'
end

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



62
63
64
65
66
67
68
69
70
71
# File 'lib/razorpay/request.rb', line 62

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



58
59
60
# File 'lib/razorpay/request.rb', line 58

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