expresscheckout 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2911f083bf551ec6ea823f7c7e51a9550640618
4
- data.tar.gz: 554f843e45ea181479b224cb15ef3a014289676f
3
+ metadata.gz: 943df6f1dca8ae6f76f96ecea6843fe6abe112d2
4
+ data.tar.gz: 94048f6a2fcdca9ba1a02910562d792e4dc490d1
5
5
  SHA512:
6
- metadata.gz: 45df3a1113adaba0a7d720791971d3ac19d5c4755a8f14638b5beac1fc05c0e3b2aa1584b2f63c1f55cfe0138883661d7d1c727e151b9eb6c1537bdd1ef49317
7
- data.tar.gz: 4930e17109385464d634759ff372cb15fd98ffd9275b583c4b3dfcd4c502fba3a728d6fcc1b4b4eed35da31d71ea682cafd6846fe78fca00f613d578103419ad
6
+ metadata.gz: 6665100fb84b0d0f64a178715970097f829033f3f85f175d6798cd893a7b288cdf21e320042ba68d6a8c22eb9ddd3c4d60301f480a3d3c9597059fb79b4103c4
7
+ data.tar.gz: 7e934728755289d271a71d5e6c94efaf4f06ed28d2acc1d9a353799b64329a10ede5acdbb81263556d54079080ac954e62271804bbfa8ed0cb06894b7c5411be
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ .idea/
11
+ *xml
data/README.md CHANGED
@@ -26,7 +26,7 @@ Or install it yourself as:
26
26
 
27
27
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
28
28
 
29
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
29
+ To install this gem onto your local machine, run `bundle exec rake install`.
30
30
 
31
31
  ## Contributing
32
32
 
data/RELEASE.md ADDED
@@ -0,0 +1,3 @@
1
+ # Release New Version
2
+
3
+ To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
data/example.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'expresscheckout'
2
+ require 'pp'
3
+
4
+ $api_key = '187BF8D543A545789497F14FCAFBD85C'
5
+
6
+ @timestamp = Time.now.to_i
7
+
8
+ order = Orders.create(:order_id => @timestamp, :amount =>10)
9
+ pp order
10
+
11
+ list = Orders.list()
12
+ pp list
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
26
  spec.bindir = "exe"
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
- spec.require_paths = ["lib","lib/Orders.rb","lib/expresscheckout.rb","lib/Payments.rb","lib/Cards.rb","lib/Test.rb","lib/util.rb",]
28
+ spec.require_paths = ["lib","lib/Orders.rb","lib/expresscheckout.rb","lib/Payments.rb","lib/Cards.rb","lib/Test.rb","lib/util.rb","lib/Customers.rb","lib/Wallets.rb"]
29
29
 
30
30
  spec.add_development_dependency "bundler", "~> 1.12"
31
31
  spec.add_development_dependency "rake", "~> 10.0"
data/lib/Cards.rb CHANGED
@@ -26,56 +26,26 @@ class Cards
26
26
 
27
27
  end
28
28
 
29
- def Cards.add(options={})
29
+ def Cards.create(options={})
30
+ if (options.length == 0)
31
+ raise InvalidArguementError.new()
32
+ end
33
+
30
34
  method = 'POST'
31
35
  url = '/card/add'
32
- parameters = {}
33
- required_args = {}
34
- Array[:merchant_id, :customer_id, :customer_email, :card_number, :card_exp_year, :card_exp_month].each do |key|
35
- required_args.store(key,'False')
36
- end
37
- options.each do |key, value|
38
- parameters.store(key,value)
39
- required_args[key] = 'True'
40
- end
41
- Array[:merchant_id, :customer_id, :customer_email, :card_number, :card_exp_year, :card_exp_month].each do |key|
42
- if required_args[key] == 'False'
43
- raise "ERROR: #{key} is a required argument for Cards.add"
44
- end
45
- end
46
- parameters.each do |key, _|
47
- unless Array[:merchant_id, :customer_id, :customer_email, :card_number, :card_exp_year,
48
- :card_exp_month, :name_on_card, :nickname].include?(key)
49
- puts " #{key} is an invalid argument for Cards.add"
50
- end
51
- end
52
36
  response = request(method,url,options)
53
37
  card = Card.new(response.body)
54
38
  return card
55
39
  end
56
40
 
57
41
  def Cards.list(options={})
42
+ customer_id = get_arg(options,:customer_id)
43
+ if customer_id == NIL
44
+ raise InvalidArguementError.new("ERROR: `customer_id` is a required parameter for Cards.list().")
45
+ end
46
+
58
47
  method = 'GET'
59
48
  url = '/card/list'
60
- parameters = {}
61
- required_args = {}
62
- Array[:customer_id].each do |key|
63
- required_args.store(key,'False')
64
- end
65
- options.each do |key, value|
66
- parameters.store(key,value)
67
- required_args[key] = 'True'
68
- end
69
- Array[:customer_id].each do |key|
70
- if required_args[key] == 'False'
71
- raise "ERROR: #{key} is a required argument for Cards.list"
72
- end
73
- end
74
- parameters.each do |key, _|
75
- unless Array[:customer_id].include?(key)
76
- puts " #{key} is an invalid argument for Cards.list"
77
- end
78
- end
79
49
  response = Array(request(method,url,options).body['cards'])
80
50
  cards = []
81
51
  i=0
@@ -88,27 +58,13 @@ class Cards
88
58
  end
89
59
 
90
60
  def Cards.delete(options={})
61
+ card_token = get_arg(options,:card_token)
62
+ if card_token == NIL
63
+ raise InvalidArguementError.new("ERROR: `card_token` is a required parameter for Card.delete().")
64
+ end
65
+
91
66
  method = 'POST'
92
67
  url = '/card/delete'
93
- parameters = {}
94
- required_args = {}
95
- Array[:card_token].each do |key|
96
- required_args.store(key,'False')
97
- end
98
- options.each do |key, value|
99
- parameters.store(key,value)
100
- required_args[key] = 'True'
101
- end
102
- Array[:card_token].each do |key|
103
- if required_args[key] == 'False'
104
- raise "ERROR: #{key} is a required argument for Cards.delete"
105
- end
106
- end
107
- parameters.each do |key, _|
108
- unless Array[:card_token].include?(key)
109
- puts " #{key} is an invalid argument for Cards.delete"
110
- end
111
- end
112
68
  response = request(method,url,options)
113
69
  card = Card.new(response.body)
114
70
  return card
data/lib/Customers.rb ADDED
@@ -0,0 +1,92 @@
1
+ require_relative 'util'
2
+
3
+ class Customers
4
+
5
+ # noinspection ALL
6
+ class Customer
7
+
8
+ attr_reader :id, :object, :date_created, :email_address, :first_name, :last_name, :mobile_country_code, :mobile_number, :object_reference_id
9
+
10
+ def initialize(options = {})
11
+ @id = get_arg(options, 'id')
12
+ @object = get_arg(options, 'object')
13
+ @date_created = get_arg(options, 'date_created')
14
+ @last_update = get_arg(options, 'last_updated')
15
+ @email_address = get_arg(options, 'email_address')
16
+ @first_name = get_arg(options, 'first_name')
17
+ @last_name = get_arg(options, 'last_name')
18
+ @mobile_country_code = get_arg(options, 'mobile_country_code')
19
+ @mobile_number = get_arg(options, 'mobile_number')
20
+ @object_reference_id = get_arg(options, 'object_reference_id')
21
+ end
22
+
23
+ end
24
+
25
+ def Customers.create(options={})
26
+ if (options.length == 0)
27
+ raise InvalidArguementError.new()
28
+ end
29
+ method = 'POST'
30
+ url = '/customers'
31
+ response = request(method,url,options)
32
+ customers = Customer.new(response.body)
33
+ return customers
34
+ end
35
+
36
+ def Customers.list(options={})
37
+ method = 'GET'
38
+ url = '/customers'
39
+ offset = get_arg(options,:offset)
40
+ count = get_arg(options,:count)
41
+
42
+ if count == NIL and offset == NIL
43
+ puts "count & offset can be passed if required.\n"
44
+ end
45
+
46
+ response = request(method,url,options).body
47
+ customer_list = Array(response['list'])
48
+ customers = []
49
+ customer_list.each do |customerData|
50
+ customer = Customer.new(customerData)
51
+ customers.push(customer)
52
+ end
53
+ customer_response = {
54
+ 'count' => response['count'],
55
+ 'offset' => response['offset'],
56
+ 'total' => response['total'],
57
+ 'list' => customers
58
+ }
59
+ return customer_response
60
+ end
61
+
62
+ def Customers.get(options={})
63
+ customer_id = get_arg(options,:customer_id)
64
+ if customer_id == NIL
65
+ raise InvalidArguementError.new("ERROR: `customer_id` is a required parameter for Customers.get().")
66
+ end
67
+
68
+ method = 'GET'
69
+ url = "/customers/#{customer_id}"
70
+ response = request(method,url,options)
71
+ customers = Customer.new(response.body)
72
+ return customers
73
+ end
74
+
75
+ def Customers.update(options={})
76
+ customer_id = get_arg(options,:customer_id)
77
+ if customer_id == NIL
78
+ raise InvalidArguementError.new("ERROR: `customer_id` is a required parameter for Customers.update().")
79
+ end
80
+
81
+ method = 'POST'
82
+ url = "/customers/#{customer_id}"
83
+ response = request(method,url,options)
84
+ customers = Customer.new(response.body)
85
+ return customers
86
+ end
87
+
88
+ def Customers.delete(options={})
89
+ raise "ERROR: Not Implemented"
90
+ end
91
+
92
+ end
data/lib/Orders.rb CHANGED
@@ -142,57 +142,26 @@ class Orders
142
142
  end
143
143
 
144
144
  def Orders.create(options={})
145
+ order = get_arg(options, :order_id)
146
+ if order == NIL
147
+ raise InvalidArguementError.new("ERROR: `order_id` is required parameter for Orders.create()")
148
+ end
149
+
145
150
  method = 'POST'
146
151
  url = '/order/create'
147
- parameters = {}
148
- required_args = {}
149
- Array[:order_id,:amount].each do |key|
150
- required_args.store(key,'False')
151
- end
152
- options.each do |key, value|
153
- parameters.store(key,value)
154
- required_args[key] = 'True'
155
- end
156
- Array[:order_id,:amount].each do |key|
157
- if required_args[key] == 'False'
158
- raise "ERROR: #{key} is a required argument for Orders.create"
159
- end
160
- end
161
- parameters.each do |key, _|
162
- unless @all_input_params.include?(key)
163
- puts " #{key} is an invalid argument for Orders.create"
164
- end
165
- end
166
- if parameters[:amount].class != Fixnum and parameters[:amount].class != Float
167
- raise "ERROR: 'amount' should be of type Fixnum or FLoat"
168
- end
169
152
  response = request(method,url,options)
170
153
  order = Order.new(response.body)
171
154
  return order
172
155
  end
173
156
 
174
- def Orders.get_status(options={})
157
+ def Orders.status(options={})
158
+ order = get_arg(options, :order_id)
159
+ if order == NIL
160
+ raise InvalidArguementError.new("ERROR: `order_id` is required parameter for Orders.status()")
161
+ end
162
+
175
163
  method = 'GET'
176
164
  url = '/order/status'
177
- parameters = {}
178
- required_args = {}
179
- Array[:order_id].each do |key|
180
- required_args.store(key,'False')
181
- end
182
- options.each do |key, value|
183
- parameters.store(key,value)
184
- required_args[key] = 'True'
185
- end
186
- Array[:order_id].each do |key|
187
- if required_args[key] == 'False'
188
- raise "ERROR: #{key} is a required argument for Orders.get_status"
189
- end
190
- end
191
- parameters.each do |key, _|
192
- unless Array[:order_id].include?(key)
193
- puts " #{key} is an invalid argument for Orders.get_status"
194
- end
195
- end
196
165
  response = request(method,url,options)
197
166
  order = Order.new(response.body)
198
167
  return order
@@ -201,142 +170,40 @@ class Orders
201
170
  def Orders.list(options={})
202
171
  method = 'GET'
203
172
  url = '/order/list'
204
- parameters = {}
205
- required_args = {}
206
- Array[].each do |key|
207
- required_args.store(key,'False')
208
- end
209
- options.each do |key, value|
210
- parameters.store(key,value)
211
- required_args[key] = 'True'
212
- end
213
- Array[].each do |key|
214
- if required_args[key] == 'False'
215
- raise "ERROR: #{key} is a required argument for Orders.list"
216
- end
217
- end
218
- parameters.each do |key, _|
219
- unless Array[:'created.gt', :'created.gt', :'created.lt', :'created.ge', :'created.le', :count, :offset].include?(key)
220
- puts " #{key} is an invalid argument for Orders.get_status"
221
- end
222
- end
223
- parameters.each do |key,_|
224
- if key == :'created.gt'
225
- if parameters[:'created.gt'].class != Fixnum
226
- puts 'created.gt should be of type Numeric\n'
227
- end
228
- end
229
- if key == :'created.lt'
230
- if parameters[:'created.lt'].class != Fixnum
231
- puts 'lt should be of type Numeric\n'
232
- end
233
- end
234
- if key == :'created.ge'
235
- if parameters[:'created.ge'].class != Fixnum
236
- puts 'created.ge should be of type Numeric\n'
237
- end
238
- end
239
- if key == :'created.le'
240
- if parameters[:'created.le'].class != Fixnum
241
- puts 'created.le should be of type Numeric\n'
242
- end
243
- end
244
- if key == :count
245
- if parameters[:count].class != Fixnum
246
- puts 'count should be of type Numeric\n'
247
- end
248
- end
249
- if key == :offset
250
- if parameters[:offset].class != Fixnum
251
- puts 'offset should be of type Numeric\n'
252
- end
253
- end
254
- end
255
173
  response = request(method,url,options).body
256
174
  orders = {count: response['count'],total: response['total'], offset: response['offset'] }
257
175
  list = []
258
- i=0
259
- while i < response['count']
260
- order = Order.new(response['list'][i])
176
+ order_list = Array(response['list'])
177
+ order_list.each do |orderData|
178
+ order = Order.new(orderData)
261
179
  list.push(order)
262
- i+=1
263
180
  end
264
181
  orders[:list] = list
265
182
  return orders
266
183
  end
267
184
 
268
185
  def Orders.update(options={})
186
+ order = get_arg(options, :order_id)
187
+ if order == NIL
188
+ raise InvalidArguementError.new("ERROR: `order_id` is required parameter for Orders.update()")
189
+ end
190
+
269
191
  method = 'POST'
270
192
  url = '/order/create'
271
- parameters = {}
272
- required_args = {}
273
- Array[:order_id].each do |key|
274
- required_args.store(key,'False')
275
- end
276
- options.each do |key, value|
277
- parameters.store(key,value)
278
- required_args[key] = 'True'
279
- end
280
- Array[:order_id].each do |key|
281
- if required_args[key] == 'False'
282
- raise "ERROR: #{key} is a required argument for Orders.update"
283
- end
284
- end
285
- parameters.each do |key, _|
286
- unless @all_input_params.include?(key)
287
- puts " #{key} is an invalid argument for Orders.create"
288
- end
289
- end
290
- parameters.each do |key,_|
291
- if key == :currency
292
- puts 'currency cannot be changed\n'
293
- end
294
- if key == :customer_id
295
- puts 'customer_id cannot be changed\n'
296
- end
297
- if key == :customer_email
298
- puts 'customer_email cannot be changed\n'
299
- end
300
- if key == :customer_phone
301
- puts 'customer_phone cannot be changed\n'
302
- end
303
- if key == :description
304
- puts 'description cannot be changed\n'
305
- end
306
- if key == :product_id
307
- puts 'product_id cannot be changed\n'
308
- end
309
- if key == :return_url
310
- puts 'return_url cannot be changed\n'
311
- end
312
- end
313
193
  response = request(method,url,options)
314
194
  order = Order.new(response.body)
315
195
  return order
316
196
  end
317
197
 
318
198
  def Orders.refund(options={})
199
+ order = get_arg(options, :order_id)
200
+ unique_request = get_arg(options, :unique_request_id)
201
+ if order == NIL or unique_request == NIL
202
+ raise InvalidArguementError.new("ERROR: `order_id` & `unique_request_id` is required parameter for Orders.refund()")
203
+ end
204
+
319
205
  method = 'POST'
320
206
  url = '/order/refund'
321
- parameters = {}
322
- required_args = {}
323
- Array[:unique_request_id,:order_id].each do |key|
324
- required_args.store(key,'False')
325
- end
326
- options.each do |key, value|
327
- parameters.store(key,value)
328
- required_args[key] = 'True'
329
- end
330
- Array[:unique_request_id,:order_id].each do |key|
331
- if required_args[key] == 'False'
332
- raise "ERROR: #{key} is a required argument for Orders.refund"
333
- end
334
- end
335
- parameters.each do |key, _|
336
- unless Array[:unique_request_id,:order_id, :amount].include?(key)
337
- puts " #{key} is an invalid argument for Orders.create"
338
- end
339
- end
340
207
  response = request(method,url,options)
341
208
  order = Order.new(response.body)
342
209
  return order
data/lib/Payments.rb CHANGED
@@ -34,9 +34,12 @@ class Payments
34
34
  def Payments.create_card_payment(options={})
35
35
  method = 'POST'
36
36
  url = '/txns'
37
- parameters = {}
37
+ parameters = {
38
+ :payment_method_type => "CARD",
39
+ :format => 'json'
40
+ }
38
41
  required_args = {}
39
- Array[:order_id, :merchant_id, :payment_method_type, :card_token, :card_number, :name_on_card,
42
+ Array[:order_id, :merchant_id, :card_token, :payment_method_type, :card_number, :name_on_card,
40
43
  :card_exp_year, :card_exp_month, :card_security_code, :save_to_locker, :redirect_after_payment,
41
44
  :format].each do |key|
42
45
  required_args.store(key,'False')
@@ -45,11 +48,15 @@ class Payments
45
48
  parameters.store(key,value)
46
49
  required_args[key] = 'True'
47
50
  end
48
- Array[:order_id, :merchant_id, :payment_method_type, :card_token, :card_number, :name_on_card,
49
- :card_exp_year, :card_exp_month, :card_security_code, :save_to_locker, :redirect_after_payment,
50
- :format].each do |key|
51
+
52
+ # Either token or card number validation
53
+ if required_args[:card_token] == 'False' and !([:card_number, :name_on_card, :card_exp_year,:card_exp_month, :card_security_code, :save_to_locker].all? {|s| options.key? s})
54
+ raise InvalidArguementError.new("ERROR: Either [card_token] or [card_number, name_on_card, card_exp_year, card_exp_month, card_security_code, save_to_locker] are required arguments for Payments.create_card_payment()")
55
+ end
56
+
57
+ Array[:order_id, :merchant_id, :redirect_after_payment].each do |key|
51
58
  if required_args[key] == 'False'
52
- raise "ERROR: #{key} is a required argument for Payments.create_card_payment"
59
+ raise InvalidArguementError.new("ERROR: #{key} is a required argument for Payments.create_card_payment")
53
60
  end
54
61
  end
55
62
  parameters.each do |key, _|
@@ -59,13 +66,14 @@ class Payments
59
66
  puts " #{key} is an invalid argument for Payments.create_card_payment"
60
67
  end
61
68
  end
62
- if parameters[:save_to_locker] != true and parameters[:save_to_locker] != false
63
- raise "ERROR: 'save_to_locker' should be true or false"
69
+ if required_args[:save_to_locker] == 'True' && parameters[:save_to_locker] != true and parameters[:save_to_locker] != false
70
+ raise InvalidArguementError.new("ERROR: 'save_to_locker' should be true or false")
64
71
  end
65
72
  if parameters[:redirect_after_payment] != true and parameters[:redirect_after_payment] != false
66
- raise "ERROR: 'redirect_after_payment' should be true or false"
73
+ raise InvalidArguementError.new("ERROR: 'redirect_after_payment' should be true or false")
67
74
  end
68
- response = request(method,url,options)
75
+
76
+ response = request(method,url,parameters)
69
77
  payment = Transaction.new(response.body)
70
78
  return payment
71
79
  end
@@ -73,18 +81,21 @@ class Payments
73
81
  def Payments.create_net_banking_payment(options={})
74
82
  method = 'POST'
75
83
  url = '/txns'
76
- parameters = {}
84
+ parameters = {
85
+ :payment_method_type => "NB",
86
+ :format => 'json'
87
+ }
77
88
  required_args = {}
78
- Array[:order_id, :merchant_id, :payment_method_type, :payment_method, :redirect_after_payment, :format].each do |key|
89
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
79
90
  required_args.store(key,'False')
80
91
  end
81
92
  options.each do |key, value|
82
93
  parameters.store(key,value)
83
94
  required_args[key] = 'True'
84
95
  end
85
- Array[:order_id, :merchant_id, :payment_method_type, :payment_method, :redirect_after_payment, :format].each do |key|
96
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
86
97
  if required_args[key] == 'False'
87
- raise "ERROR: #{key} is a required argument for Payments.create_net_banking_payment"
98
+ raise InvalidArguementError.new("ERROR: #{key} is a required argument for Payments.create_net_banking_payment")
88
99
  end
89
100
  end
90
101
  parameters.each do |key, _|
@@ -92,9 +103,41 @@ class Payments
92
103
  puts " #{key} is an invalid argument for Payments.create_net_banking_payment"
93
104
  end
94
105
  end
95
- response = request(method,url,options)
106
+
107
+ response = request(method,url,parameters)
108
+ payment = Transaction.new(response.body)
109
+ return payment
110
+ end
111
+
112
+ def Payments.create_wallet_payment(options={})
113
+ method = 'POST'
114
+ url = '/txns'
115
+ parameters = {
116
+ :payment_method_type => "WALLET",
117
+ :format => 'json'
118
+ }
119
+ required_args = {}
120
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
121
+ required_args.store(key,'False')
122
+ end
123
+ options.each do |key, value|
124
+ parameters.store(key,value)
125
+ required_args[key] = 'True'
126
+ end
127
+ Array[:order_id, :merchant_id, :payment_method, :redirect_after_payment].each do |key|
128
+ if required_args[key] == 'False'
129
+ raise InvalidArguementError.new("ERROR: #{key} is a required argument for Payments.create_wallet_payment")
130
+ end
131
+ end
132
+ parameters.each do |key, _|
133
+ unless Array[:order_id, :merchant_id, :payment_method_type, :payment_method, :redirect_after_payment, :format, :direct_wallet_token].include?(key)
134
+ puts " #{key} is an invalid argument for Payments.create_wallet_payment"
135
+ end
136
+ end
137
+
138
+ response = request(method,url,parameters)
96
139
  payment = Transaction.new(response.body)
97
140
  return payment
98
141
  end
99
142
 
100
- end
143
+ end
data/lib/Test.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require_relative 'Orders'
2
2
  require_relative 'Cards'
3
3
  require_relative 'Payments'
4
+ require_relative 'Wallets'
5
+ require_relative 'Customers'
4
6
  require 'minitest/autorun'
5
7
  require 'pp'
6
8
 
@@ -16,9 +18,8 @@ def pp(obj)
16
18
  end
17
19
 
18
20
  class Test < Minitest::Test
19
-
20
- $api_key = '4168A8A476B84DBCAF409C24F379BAC5'
21
- $environment = 'production'
21
+ $api_key = '187BF8D543A545789497F14FCAFBD85C'
22
+ $environment = 'staging'
22
23
 
23
24
  def setup
24
25
  @timestamp = Time.now.to_i
@@ -31,7 +32,7 @@ class Test < Minitest::Test
31
32
  #pp order
32
33
 
33
34
  # Test for get_status
34
- status = Orders.get_status(order_id:@timestamp)
35
+ status = Orders.status(order_id:@timestamp)
35
36
  assert_equal(Float(status.order_id), @timestamp)
36
37
  #pp status
37
38
 
@@ -42,12 +43,13 @@ class Test < Minitest::Test
42
43
 
43
44
  # Test for update
44
45
  updated_order = Orders.update(order_id:@timestamp, amount:500)
45
- status = Orders.get_status(order_id:@timestamp)
46
+ status = Orders.status(order_id:@timestamp)
46
47
  assert_equal(status.amount, updated_order.amount)
47
- #pp updated_order
48
+ end
48
49
 
50
+ def test_refund
49
51
  # Test for refund
50
- refunded_order = Orders.refund(unique_request_id: @timestamp, order_id: 1465833326,amount: 10)
52
+ refunded_order = Orders.refund(unique_request_id: @timestamp, order_id: '1471441349',amount: 1)
51
53
  #pp refunded_order
52
54
  end
53
55
 
@@ -61,7 +63,7 @@ class Test < Minitest::Test
61
63
  def test_cards
62
64
 
63
65
  # Test for add
64
- card = Cards.add(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
66
+ card = Cards.create(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
65
67
  card_number:@timestamp*(10**6), card_exp_year:'20', card_exp_month:'12')
66
68
  refute_nil(card.reference)
67
69
  refute_nil(card.token)
@@ -73,9 +75,9 @@ class Test < Minitest::Test
73
75
  #pp deleted_card
74
76
  # Test for list
75
77
  #Test.delete_all_cards
76
- Cards.add(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
78
+ Cards.create(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
77
79
  card_number:@timestamp * (10 ** 6), card_exp_year:'20', card_exp_month:'12')
78
- Cards.add(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
80
+ Cards.create(merchant_id:'shreyas', customer_id:'user', customer_email:'abc@xyz.com',
79
81
  card_number:@timestamp * (10 ** 6)+1, card_exp_year:'20', card_exp_month:'12')
80
82
  card_list = Cards.list(customer_id:'user')
81
83
  refute_nil(card_list)
@@ -88,13 +90,10 @@ class Test < Minitest::Test
88
90
 
89
91
  # Test for create_card_payment
90
92
  payment = Payments.create_card_payment(
91
- order_id:1465893617,
92
- merchant_id:'juspay_recharge',
93
- payment_method_type:'CARD',
94
- card_token:'68d6b0c6-6e77-473f-a05c-b460ef983fd8',
93
+ order_id:1470043679,
94
+ merchant_id:'azhar',
95
95
  redirect_after_payment:false,
96
- format:'json',
97
- card_number:'5243681100075285',
96
+ card_number:'4242424242424242',
98
97
  name_on_card:'Customer',
99
98
  card_exp_year:'20',
100
99
  card_exp_month:'12',
@@ -102,18 +101,74 @@ class Test < Minitest::Test
102
101
  save_to_locker:false)
103
102
  refute_nil(payment.txn_id)
104
103
  assert_equal(payment.status, 'PENDING_VBV')
105
- pp payment
104
+
106
105
  # Test for create_net_banking_payment
107
106
  payment = Payments.create_net_banking_payment(
108
- order_id:1465893617,
109
- merchant_id:'juspay_recharge',
110
- payment_method_type:'NB',
111
- payment_method:'NB_ICICI',
112
- redirect_after_payment:false,
113
- format:'json')
107
+ order_id:1470043679,
108
+ merchant_id:'azhar',
109
+ payment_method:'NB_DUMMY',
110
+ redirect_after_payment:false)
114
111
  refute_nil(payment.txn_id)
115
112
  assert_equal(payment.status, 'PENDING_VBV')
116
- pp payment
113
+
114
+ # Test for create_wallet_payment
115
+ payment = Payments.create_wallet_payment(
116
+ order_id:'check5',
117
+ merchant_id:'azharamin',
118
+ payment_method:'MOBIKWIK',
119
+ redirect_after_payment:false)
120
+ refute_nil(payment.txn_id)
121
+ assert_match(/^(PENDING_VBV|CHARGED)$/,payment.status)
122
+ end
123
+
124
+ def test_customers
125
+ #Add customer
126
+ customer = Customers.create(
127
+ object_reference_id: "CustId#{@timestamp}",
128
+ mobile_number: '7272727272',
129
+ email_address: 'az@temp.com',
130
+ first_name: 'temp',
131
+ last_name: 'kumar',
132
+ mobile_country_code: '35'
133
+ )
134
+ refute_nil(customer)
135
+
136
+ #Get customer
137
+ customer = Customers.get(
138
+ customer_id: customer.id
139
+ )
140
+ refute_nil(customer)
141
+
142
+ #Update customer
143
+ customer = Customers.update(
144
+ customer_id: customer.id,
145
+ mobile_number: '7272727273',
146
+ email_address: 'newaz@temp.com',
147
+ first_name: 'newtemp',
148
+ last_name: 'newkumar',
149
+ mobile_country_code: '91'
150
+ )
151
+ refute_nil(customer)
152
+
153
+ #List customer
154
+ customer = Customers.list(
155
+ count: 1
156
+ )
157
+ assert_equal(customer['count'], 1)
158
+ end
159
+
160
+ def test_wallets
161
+ # List wallets by orderId
162
+ wallets = Wallets.list(order_id:'1471434419')
163
+ refute_nil(wallets[0].id)
164
+
165
+ # List wallets by customerId
166
+ wallets = Wallets.list(customer_id:'guest_user_101')
167
+ refute_nil(wallets[0].id)
168
+
169
+ # List wallets by customerId
170
+ wallets = Wallets.refresh_balance(customer_id:'guest_user_104')
171
+ refute_nil(wallets[0].id)
117
172
  end
118
173
  end
119
174
 
data/lib/Wallets.rb ADDED
@@ -0,0 +1,74 @@
1
+ require_relative 'util'
2
+
3
+ class Wallets
4
+
5
+ # noinspection ALL
6
+ class Wallet
7
+
8
+ attr_reader :id, :wallet, :object, :token, :current_balance, :last_refresh
9
+
10
+ def initialize(options = {})
11
+ @id = get_arg(options, 'id')
12
+ @object = get_arg(options, 'object')
13
+ @wallet = get_arg(options, 'wallet')
14
+ @token = get_arg(options, 'token')
15
+ @current_balance = get_arg(options, 'current_balance')
16
+ @last_refresh = get_arg(options, 'last_refreshed')
17
+ end
18
+
19
+ end
20
+
21
+ def Wallets.create(options={})
22
+ raise "ERROR: Not Implemented"
23
+ end
24
+
25
+ def Wallets.list(options={})
26
+ order = get_arg(options, :order_id)
27
+ customer = get_arg(options, :customer_id)
28
+
29
+ if customer == NIL and order == NIL
30
+ raise InvalidArguementError.new("ERROR: `customer_id` or `order_id` is required parameter for Wallets.list()")
31
+ end
32
+
33
+ if customer
34
+ url = "/customers/#{customer}/wallets"
35
+ else
36
+ url = "/orders/#{order}/wallets"
37
+ end
38
+
39
+ method = 'GET'
40
+ response = Array(request(method,url,{}).body['list'])
41
+ wallets = []
42
+ i=0
43
+ while i != response.count
44
+ wallet = Wallet.new(response[i])
45
+ wallets.push(wallet)
46
+ i+=1
47
+ end
48
+ return wallets
49
+ end
50
+
51
+ def Wallets.refresh_balance(options={})
52
+ customer = get_arg(options, :customer_id)
53
+
54
+ if customer == NIL
55
+ raise InvalidArguementError.new("ERROR: `customer_id` is required parameter for Wallets.refresh_balance()")
56
+ end
57
+
58
+ url = "/customers/#{customer}/wallets/refresh-balances"
59
+ method = 'GET'
60
+ response = Array(request(method,url,{}).body['list'])
61
+ wallets = []
62
+ i=0
63
+ while i != response.count
64
+ wallet = Wallet.new(response[i])
65
+ wallets.push(wallet)
66
+ i+=1
67
+ end
68
+ return wallets
69
+ end
70
+
71
+ def Wallets.delete(options={})
72
+ raise "ERROR: Not Implemented"
73
+ end
74
+ end
@@ -0,0 +1,2 @@
1
+ class APIConnectionError < JuspayError
2
+ end
@@ -0,0 +1,3 @@
1
+ class APIError < JuspayError
2
+ end
3
+
@@ -0,0 +1,3 @@
1
+ class AuthenticationError < JuspayError
2
+ end
3
+
@@ -0,0 +1,7 @@
1
+ class InvalidArguementError < JuspayError
2
+ def initialize(message=nil)
3
+ @_message = (message ? message : "ERROR: Please pass requiered parameters.")
4
+ super(@_message)
5
+ end
6
+ end
7
+
@@ -0,0 +1,3 @@
1
+ class InvalidRequestError < JuspayError
2
+ end
3
+
@@ -0,0 +1,14 @@
1
+ class JuspayError < StandardError
2
+
3
+ def initialize(message=nil, http_status=nil, json_body=nil)
4
+ @_message = message
5
+ @http_status = http_status
6
+ @json_body = json_body
7
+ end
8
+
9
+ def to_s
10
+ status_string = @http_status.nil? ? '' : "(Status #{@http_status})\n"
11
+ json_string = @json_body.nil? ? '' : "(Response #{@json_body})\n"
12
+ "\n#{status_string}#{json_string}#{@_message}\n"
13
+ end
14
+ end
@@ -1,3 +1,3 @@
1
1
  module Expresscheckout
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
@@ -1,12 +1,15 @@
1
1
  require "expresscheckout/version"
2
2
 
3
3
  module Expresscheckout
4
- require 'unirest'
5
4
  require_relative 'Orders'
6
5
  require_relative 'Cards'
7
6
  require_relative 'Payments'
7
+ require_relative 'Customers'
8
+ require_relative 'Wallets'
8
9
 
9
- $api_key = ''
10
- $environment = 'production'
10
+ $api_key = nil
11
+ $environment = 'staging'
11
12
  $version= {:JuspayAPILibrary=>'Ruby v1.0'}
12
13
  end
14
+
15
+ require 'unirest'
data/lib/util.rb CHANGED
@@ -1,19 +1,43 @@
1
1
  require_relative 'expresscheckout'
2
+ # Errors
3
+ require 'errors/juspay_error'
4
+ require 'errors/api_error'
5
+ require 'errors/api_connection_error'
6
+ require 'errors/invalid_request_error'
7
+ require 'errors/authentication_error'
8
+ require 'errors/invalid_arguement_error'
2
9
 
3
- def request(method,url,parameters={})
4
- if $environment == 'production'
5
- $server = 'https://api.juspay.in'
6
- elsif $environment == 'staging'
7
- $server = 'https://sandbox.juspay.in'
8
- else
9
- raise 'ERROR: environment variable can be "production" or "staging"'
10
- end
11
- if method == 'GET'
12
- response = Unirest.get $server+url, headers: $version, auth:{:user=>$api_key, :password=>''}, parameters: parameters
13
- else
14
- response = Unirest.post $server +url, headers: $version, auth:{:user=>$api_key, :password=>''}, parameters: parameters
10
+ def request(method, url, parameters={})
11
+ begin
12
+ if $environment == 'production'
13
+ $server = 'https://api.juspay.in'
14
+ elsif $environment == 'staging'
15
+ $server = 'https://sandbox.juspay.in'
16
+ else
17
+ raise InvalidArguementError.new('ERROR: environment variable can be "production" or "staging"')
18
+ end
19
+ if $api_key == nil
20
+ raise AuthenticationError.new("ERROR: API key missing. Please specify api_key.")
21
+ end
22
+ if method == 'GET'
23
+ response = Unirest.get $server+url, headers: $version, auth: {:user => $api_key, :password => ''}, parameters: parameters
24
+ else
25
+ response = Unirest.post $server +url, headers: $version, auth: {:user => $api_key, :password => ''}, parameters: parameters
26
+ end
27
+ if (response.code >= 200 && response.code < 300)
28
+ return response
29
+ elsif ([400, 404].include? response.code)
30
+ raise InvalidRequestError.new('Invalid Request', response.code, response.body)
31
+ elsif (response.code == 401)
32
+ raise AuthenticationError.new('Unauthenticated Request', response.code, response.body)
33
+ else
34
+ raise APIError.new('Invalid Request', response.code, response.body)
35
+ end
36
+ rescue IOError
37
+ raise APIConnectionError.new('Connection error')
38
+ rescue SocketError
39
+ raise APIConnectionError.new('Socket error. Failed to connect.')
15
40
  end
16
- response
17
41
  end
18
42
 
19
43
  def get_arg(options = {}, param)
@@ -27,10 +51,10 @@ def get_arg(options = {}, param)
27
51
  end
28
52
 
29
53
  def check_param(options = {}, param)
30
- options.each do |key,_|
54
+ options.each do |key, _|
31
55
  if key.include?(param)
32
56
  return true
33
57
  end
34
58
  end
35
59
  false
36
- end
60
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expresscheckout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juspay
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-14 00:00:00.000000000 Z
11
+ date: 2016-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -65,14 +65,24 @@ files:
65
65
  - Gemfile
66
66
  - LICENSE.txt
67
67
  - README.md
68
+ - RELEASE.md
68
69
  - Rakefile
69
70
  - bin/console
70
71
  - bin/setup
72
+ - example.rb
71
73
  - expresscheckout.gemspec
72
74
  - lib/Cards.rb
75
+ - lib/Customers.rb
73
76
  - lib/Orders.rb
74
77
  - lib/Payments.rb
75
78
  - lib/Test.rb
79
+ - lib/Wallets.rb
80
+ - lib/errors/api_connection_error.rb
81
+ - lib/errors/api_error.rb
82
+ - lib/errors/authentication_error.rb
83
+ - lib/errors/invalid_arguement_error.rb
84
+ - lib/errors/invalid_request_error.rb
85
+ - lib/errors/juspay_error.rb
76
86
  - lib/expresscheckout.rb
77
87
  - lib/expresscheckout/version.rb
78
88
  - lib/util.rb
@@ -91,6 +101,8 @@ require_paths:
91
101
  - lib/Cards.rb
92
102
  - lib/Test.rb
93
103
  - lib/util.rb
104
+ - lib/Customers.rb
105
+ - lib/Wallets.rb
94
106
  required_ruby_version: !ruby/object:Gem::Requirement
95
107
  requirements:
96
108
  - - ">="