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, host = Razorpay::API_HOST) ⇒ Request

Returns a new instance of Request.



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
# File 'lib/razorpay/request.rb', line 14

def initialize(entity_name = nil, host = Razorpay::API_HOST)
  self.class.base_uri(get_base_url(host))
  @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)

  if Razorpay.auth_type == Razorpay::OAUTH
    @options = {
      timeout: 30,
      headers: headers
    }
    headers['Authorization'] = 'Bearer ' + Razorpay.access_token 
  else 
    @options = {
      basic_auth: Razorpay.auth,
      timeout: 30,
      headers: headers
    }
  end
end

Instance Method Details

#all(options, version = "v1") ⇒ Object



44
45
46
# File 'lib/razorpay/request.rb', line 44

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

#create(data, version = "v1") ⇒ Object



68
69
70
# File 'lib/razorpay/request.rb', line 68

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

#create_instance(res) ⇒ Object

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



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/razorpay/request.rb', line 101

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 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

#delete(url, version = "v1") ⇒ Object



56
57
58
# File 'lib/razorpay/request.rb', line 56

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

#fetch(id, version = "v1") ⇒ Object



40
41
42
# File 'lib/razorpay/request.rb', line 40

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

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



52
53
54
# File 'lib/razorpay/request.rb', line 52

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

#get_base_url(host) ⇒ Object



87
88
89
90
91
92
# File 'lib/razorpay/request.rb', line 87

def get_base_url(host)
  if host == Razorpay::AUTH_HOST
    return Razorpay::AUTH_URL
  end 
  Razorpay::BASE_URI
end

#make_test_requestObject

Since we need to change the base route



95
96
97
# File 'lib/razorpay/request.rb', line 95

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

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



64
65
66
# File 'lib/razorpay/request.rb', line 64

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

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



48
49
50
# File 'lib/razorpay/request.rb', line 48

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

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



60
61
62
# File 'lib/razorpay/request.rb', line 60

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

#raise_error(error, status) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
# File 'lib/razorpay/request.rb', line 123

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



76
77
78
79
80
81
82
83
84
85
# File 'lib/razorpay/request.rb', line 76

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



72
73
74
# File 'lib/razorpay/request.rb', line 72

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