rb-instamojo 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0fc417f57c0f0b4f7234db1cd29c687132f45bf2
4
+ data.tar.gz: 90df1cfbd0e4493261716fc2e5c3c641c260dd9e
5
+ SHA512:
6
+ metadata.gz: 7929eed89f11e047ef0c3f636cac4ffbd5707c5938cd6bd54683de9c0e204956a5e30a673f699cc2db918d4b9590da7d7ea52245f9f40be7f4b7c8dac38f46e7
7
+ data.tar.gz: 89e0f8464bc56b8b412806245b481d6c2bdbf389ca87a07b48237e613691225fed1c90841649ade3360233c5bc4cda3514c7247e4f4115eaf329b074f5558614
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require pry
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.1
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in instamojo.gemspec
4
+ gem 'pry-byebug'
5
+ gemspec
data/README.md ADDED
@@ -0,0 +1,565 @@
1
+ # Instamojo
2
+
3
+ Will use to integrate instomojo apis with ruby. Will support ruby 2.0 or newver
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'instamojo'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install instamojo
20
+
21
+ ## Usage
22
+
23
+ add following code to config/intializer/instamojo.rb
24
+
25
+ ```ruby
26
+ Instamojo.configure do |config|
27
+ config.client_id = 'XXXX'
28
+ config.client_secret = 'XXXXXXX'
29
+ config.mode = :test
30
+ end
31
+
32
+ ```
33
+
34
+ ## Development
35
+
36
+ ### Sign up method
37
+
38
+ ```ruby
39
+ options = {
40
+ username: 'xxx', # manadatory
41
+ email: 'xxx@xxx.xxx', # manadatory
42
+ password: 'xxxxx233xxx', # manadatory
43
+ phone: 'xxxxxxxxx', # manadatory
44
+ referrer: 'xxxxx'
45
+ }
46
+ api.signup(options)
47
+ ```
48
+
49
+
50
+ ### Generate User Token
51
+
52
+ ```ruby
53
+ options = {
54
+ username: 'xxx', # manadatory
55
+ password: 'xxxxx233xxx', # manadatory
56
+ }
57
+ api.user_token(options)
58
+ ```
59
+
60
+
61
+ ### Update Bank Details
62
+
63
+ ```ruby
64
+ options = {
65
+ account_holder_name: 'xxx', # manadatory
66
+ account_number: '998799899', # manadatory
67
+ ifsc_code: 'JUUJU9889'
68
+ }
69
+
70
+ user_id # manadatory
71
+ api.inrbankaccount(user_id, options)
72
+ ```
73
+
74
+
75
+ ### Create Payment Link
76
+
77
+ ```ruby
78
+ options = {
79
+ 'amount': '2500', # mandatory
80
+ 'purpose': 'FIFA 16', # mandatory
81
+ 'buyer_name': 'John Doe', # mandatory
82
+ 'email': 'foo@example.com',
83
+ 'phone': '9999999999',
84
+ 'redirect_url': 'http://www.example.com/redirect/',
85
+ 'send_email': 'True',
86
+ 'send_sms': 'True',
87
+ 'webhook': 'http://www.example.com/webhook/'
88
+ 'allow_repeated_payments': 'False',
89
+ }
90
+ api.payment_link(options)
91
+ ```
92
+
93
+ ### API Doc
94
+
95
+ ```ruby
96
+ {
97
+ "id":"bf9d8993-83e1-5687-3c4a-3b9ac8c25fc1",
98
+ "name":"auth-flow-integration",
99
+ "description":"",
100
+ "order":[
101
+ "bb1ab458-c149-34fb-9b07-95952eac3f0f",
102
+ "3fefebf2-9f92-bda5-c6cc-67d4cbc9a2ee",
103
+ "2229fdf6-6d19-fc9c-510b-1a39f0caba02",
104
+ "2cda24d7-aab9-fba0-0db7-33dc744e5bc8",
105
+ "284c2f07-2a18-b340-9114-ffe88d99f425",
106
+ "3f4938b7-7a0b-8254-19ab-ed553f955151"
107
+ ],
108
+ "folders":[
109
+
110
+ ],
111
+ "timestamp":1444030167485,
112
+ "owner":"47402",
113
+ "remoteLink":"",
114
+ "public":false,
115
+ "requests":[
116
+ {
117
+ "collectionId":"bf9d8993-83e1-5687-3c4a-3b9ac8c25fc1",
118
+ "id":"2229fdf6-6d19-fc9c-510b-1a39f0caba02",
119
+ "name":"Get User Token",
120
+ "description":"### Get User Access Token\n\nUse this to get an User access token. You will need it to modify of a user on Instamojo.\n\nThe expiry time for an user access token is `36000` seconds.\n\nA user token will have a refresh token associated with it. So if a user token expires, you can use the refresh token along with your client_id and client_secret to get a new user access token.\n\n##### Field validations\n1. `grant_type`: `client_credentials`\n2. `username`: Mandatory. Username of the user.\n3. `password`: Mandatory. Password of the user.\n4. `client_id`: Mandatory. You Instamojo client_id.\n5. `client_secret`: Mandatory. Your Instamojo client_secret.\n",
121
+ "url":"{{AUTH_SERVER}}/oauth2/token/",
122
+ "method":"POST",
123
+ "headers":"",
124
+ "data":[
125
+ {
126
+ "key":"grant_type",
127
+ "value":"password",
128
+ "type":"text",
129
+ "enabled":true
130
+ },
131
+ {
132
+ "key":"client_id",
133
+ "value":"{{CLIENT_ID}}",
134
+ "type":"text",
135
+ "enabled":true
136
+ },
137
+ {
138
+ "key":"client_secret",
139
+ "value":"{{CLIENT_SECRET}}",
140
+ "type":"text",
141
+ "enabled":true
142
+ },
143
+ {
144
+ "key":"username",
145
+ "value":"{{USERNAME}}",
146
+ "type":"text",
147
+ "enabled":true
148
+ },
149
+ {
150
+ "key":"password",
151
+ "value":"{{PASSWORD}}",
152
+ "type":"text",
153
+ "enabled":true
154
+ }
155
+ ],
156
+ "dataMode":"params",
157
+ "responses":[
158
+
159
+ ],
160
+ "version":2
161
+ },
162
+ {
163
+ "collectionId":"bf9d8993-83e1-5687-3c4a-3b9ac8c25fc1",
164
+ "id":"284c2f07-2a18-b340-9114-ffe88d99f425",
165
+ "name":"Update bank details",
166
+ "description":"## Add / Update the Bank Details\n\n\nPayouts will be sent/processed to this bank account.\n\n#### Field validations\n\n1. `account_holder_name` - Mandatory. Maxlength=100\n2. `account_number` - Mandatory. Maxlength=50, Digits only.\n3. `ifsc_code` - Mandatory, Exact length=11, First 4 alpha, 5th 0, remaining alpha numeric. Ex: `SBIN0123456`",
167
+ "url":"{{API_SERVER}}/v2/users/{{USER_ID}}/inrbankaccount/",
168
+ "method":"PUT",
169
+ "headers":"Authorization: Bearer {{USER_ACCESS_TOKEN}}\n",
170
+ "data":[
171
+ {
172
+ "key":"account_holder_name",
173
+ "value":"Foo Bar",
174
+ "type":"text",
175
+ "enabled":true
176
+ },
177
+ {
178
+ "key":"account_number",
179
+ "value":"123456789",
180
+ "type":"text",
181
+ "enabled":true
182
+ },
183
+ {
184
+ "key":"ifsc_code",
185
+ "value":"SBIN0123456",
186
+ "type":"text",
187
+ "enabled":true
188
+ }
189
+ ],
190
+ "dataMode":"params",
191
+ "responses":[
192
+
193
+ ],
194
+ "version":2
195
+ },
196
+ {
197
+ "collectionId":"bf9d8993-83e1-5687-3c4a-3b9ac8c25fc1",
198
+ "id":"2cda24d7-aab9-fba0-0db7-33dc744e5bc8",
199
+ "name":"Update Name and Location of a User",
200
+ "description":"### Update User information\n\n##### Validations\n1. `first_name` - Optional. Maxlength=30\n2. `last_name` - Optional. Maxlength=30\n3. `location` - Optional. Maxlenth=100. Location in text format. Ex: Mumbai, India",
201
+ "url":"{{API_SERVER}}/v2/users/{{USER_ID}}",
202
+ "method":"PATCH",
203
+ "headers":"Authorization: Bearer {{USER_ACCESS_TOKEN}}\n",
204
+ "data":[
205
+ {
206
+ "key":"first_name",
207
+ "value":"Foo",
208
+ "type":"text",
209
+ "enabled":true
210
+ },
211
+ {
212
+ "key":"last_name",
213
+ "value":"Bar",
214
+ "type":"text",
215
+ "enabled":true
216
+ },
217
+ {
218
+ "key":"location",
219
+ "value":"India",
220
+ "type":"text",
221
+ "enabled":true
222
+ }
223
+ ],
224
+ "dataMode":"params",
225
+ "responses":[
226
+
227
+ ],
228
+ "version":2
229
+ },
230
+ {
231
+ "collectionId":"bf9d8993-83e1-5687-3c4a-3b9ac8c25fc1",
232
+ "id":"3f4938b7-7a0b-8254-19ab-ed553f955151",
233
+ "name":"Get User Token from Refresh Token",
234
+ "description":"### Get User token from Refresh token\n\nIf you already have a user access token for a specific user, but the token has expired, use this to fetch a fresh access token. \n\nWhen you use this, you wont need the user's credentials again. Send the refresh_token instead. \n\nAlso, note that the `grant_type` in this case is `refresh_token`.\n\n###### Field validations\n1. `grant_type`: `refresh_token`\n2. `refresh_token`: Mandatory. The refresh token.\n3. `client_id`: Mandatory. You Instamojo client_id.\n4. `client_secret`: Mandatory. Your Instamojo client_secret.",
235
+ "url":"{{AUTH_SERVER}}/oauth2/token/",
236
+ "method":"POST",
237
+ "headers":"",
238
+ "data":[
239
+ {
240
+ "key":"grant_type",
241
+ "value":"refresh_token",
242
+ "type":"text",
243
+ "enabled":true
244
+ },
245
+ {
246
+ "key":"client_id",
247
+ "value":"{{CLIENT_ID}}",
248
+ "type":"text",
249
+ "enabled":true
250
+ },
251
+ {
252
+ "key":"client_secret",
253
+ "value":"{{CLIENT_SECRET}}",
254
+ "type":"text",
255
+ "enabled":true
256
+ },
257
+ {
258
+ "key":"refresh_token",
259
+ "value":"IHbzz97XePGwX3VBGaVlOdGOxfGHWJ",
260
+ "type":"text",
261
+ "enabled":true
262
+ }
263
+ ],
264
+ "dataMode":"params",
265
+ "responses":[
266
+
267
+ ],
268
+ "version":2
269
+ },
270
+ {
271
+ "collectionId":"bf9d8993-83e1-5687-3c4a-3b9ac8c25fc1",
272
+ "id":"3fefebf2-9f92-bda5-c6cc-67d4cbc9a2ee",
273
+ "name":"Signup",
274
+ "description":"### Sign up users\n\n#####Field Validations\n1. `username`: Mandatory. `Maxlength` = `35 chars`.\n2. `password`: Mandatory.\n3. `email`: Mandatory.\n4. `phone`: Mandatory\n4. `referrer`: `shopo`",
275
+ "url":"{{API_SERVER}}/v2/users/",
276
+ "method":"POST",
277
+ "headers":"Authorization: Bearer {{APP_ACCESS_TOKEN}}\n",
278
+ "data":[
279
+ {
280
+ "key":"username",
281
+ "value":"dhanush_5oct13",
282
+ "type":"text"
283
+ },
284
+ {
285
+ "key":"password",
286
+ "value":"abcd1234",
287
+ "type":"text"
288
+ },
289
+ {
290
+ "key":"email",
291
+ "value":"dhanush+5oct13@instamojo.com",
292
+ "type":"text"
293
+ },
294
+ {
295
+ "key":"phone",
296
+ "value":"+918748984861",
297
+ "type":"text"
298
+ },
299
+ {
300
+ "key":"referrer",
301
+ "value":"shopo",
302
+ "type":"text"
303
+ }
304
+ ],
305
+ "dataMode":"params",
306
+ "timestamp":0,
307
+ "version":2,
308
+ "time":1444116541552
309
+ },
310
+ {
311
+ "collectionId":"bf9d8993-83e1-5687-3c4a-3b9ac8c25fc1",
312
+ "id":"bb1ab458-c149-34fb-9b07-95952eac3f0f",
313
+ "name":"Get App Token",
314
+ "description":"### Get an app access token\n\nUse this to get an App access token. You will need it to sign up users on Instamojo.\n\nThe expiry time for a app access token is `36000` seconds.\n\nAn app token wont have any refresh token associated to it. So if an app access token expires, you will have to resend this request again. \n\n##### Field validations\n1. `grant_type`: `client_credentials`\n2. `client_id`: Mandatory. You Instamojo client_id.\n3. `client_secret`: Mandatory. Your Instamojo client_secret.",
315
+ "url":"{{AUTH_SERVER}}/oauth2/token/",
316
+ "method":"POST",
317
+ "headers":"",
318
+ "data":[
319
+ {
320
+ "key":"grant_type",
321
+ "value":"client_credentials",
322
+ "type":"text",
323
+ "enabled":true
324
+ },
325
+ {
326
+ "key":"client_id",
327
+ "value":"{{CLIENT_ID}}",
328
+ "type":"text",
329
+ "enabled":true
330
+ },
331
+ {
332
+ "key":"client_secret",
333
+ "value":"{{CLIENT_SECRET}}",
334
+ "type":"text",
335
+ "enabled":true
336
+ }
337
+ ],
338
+ "dataMode":"params",
339
+ "responses":[
340
+
341
+ ],
342
+ "version":2
343
+ }
344
+ ]
345
+ }
346
+ ```
347
+
348
+ ## Payment API
349
+
350
+ ```ruby
351
+ {
352
+ "id":"cffc6b9e-ab1c-4ba3-411d-fd45c38f671f",
353
+ "name":"RAP V2",
354
+ "timestamp":1444044417026,
355
+ "requests":[
356
+ {
357
+ "collectionId":"cffc6b9e-ab1c-4ba3-411d-fd45c38f671f",
358
+ "id":"40564e31-10c1-0e71-1f2a-e40560b81dcb",
359
+ "name":"RAP details",
360
+ "description":"Get the details of a payment request using the payment_request_id",
361
+ "url":"{{API_SERVER}}/v2/payment_requests/{{PAYMENT_REQUEST_ID}}",
362
+ "method":"GET",
363
+ "headers":"Authorization: Bearer {{USER_ACCESS_TOKEN}\n",
364
+ "data":[
365
+ {
366
+ "key":"amount",
367
+ "value":"2500",
368
+ "type":"text"
369
+ },
370
+ {
371
+ "key":"purpose",
372
+ "value":"FIFA 16",
373
+ "type":"text"
374
+ },
375
+ {
376
+ "key":"send_sms",
377
+ "value":"True",
378
+ "type":"text"
379
+ },
380
+ {
381
+ "key":"phone",
382
+ "value":"9999999999",
383
+ "type":"text"
384
+ }
385
+ ],
386
+ "dataMode":"params",
387
+ "timestamp":0,
388
+ "version":2,
389
+ "time":1444116919416
390
+ },
391
+ {
392
+ "collectionId":"cffc6b9e-ab1c-4ba3-411d-fd45c38f671f",
393
+ "id":"48d9c02b-6884-3596-2735-6584c181875b",
394
+ "name":"RAP creation with send_sms",
395
+ "description":"If 'send_sms' field is passed as True then 'phone' field is compulsory.",
396
+ "url":"{{API_SERVER}}/v2/payment_requests/",
397
+ "method":"POST",
398
+ "headers":"Authorization: Bearer {{USER_ACCESS_TOKEN}\n",
399
+ "data":[
400
+ {
401
+ "key":"amount",
402
+ "value":"2500",
403
+ "type":"text"
404
+ },
405
+ {
406
+ "key":"purpose",
407
+ "value":"FIFA 16",
408
+ "type":"text"
409
+ },
410
+ {
411
+ "key":"send_sms",
412
+ "value":"True",
413
+ "type":"text"
414
+ },
415
+ {
416
+ "key":"phone",
417
+ "value":"9999999999",
418
+ "type":"text"
419
+ }
420
+ ],
421
+ "dataMode":"params",
422
+ "timestamp":0,
423
+ "version":2,
424
+ "time":1444116914545
425
+ },
426
+ {
427
+ "collectionId":"cffc6b9e-ab1c-4ba3-411d-fd45c38f671f",
428
+ "id":"69d60626-2572-44ad-daa3-96ee2a6a5f12",
429
+ "name":"RAP creation minimal data",
430
+ "description":"Amount and purpose are the only compulsory fields for creating a request payment.",
431
+ "url":"{{API_SERVER}}/v2/payment_requests/",
432
+ "method":"POST",
433
+ "headers":"Authorization: Bearer {{USER_ACCESS_TOKEN}\n",
434
+ "data":[
435
+ {
436
+ "key":"amount",
437
+ "value":"2500",
438
+ "type":"text"
439
+ },
440
+ {
441
+ "key":"purpose",
442
+ "value":"FIFA 16",
443
+ "type":"text"
444
+ }
445
+ ],
446
+ "dataMode":"params",
447
+ "timestamp":0,
448
+ "version":2,
449
+ "time":1444116823741
450
+ },
451
+ {
452
+ "collectionId":"cffc6b9e-ab1c-4ba3-411d-fd45c38f671f",
453
+ "id":"891e3ec0-9c39-c7c1-c5e8-b0a4f4ea6924",
454
+ "name":"RAP creation with maximal data",
455
+ "description":"This request contains all of the fields that we can pass with a payment request creation.",
456
+ "url":"{{API_SERVER}}/v2/payment_requests/",
457
+ "method":"POST",
458
+ "headers":"Authorization: Bearer {{USER_ACCESS_TOKEN}\n",
459
+ "data":[
460
+ {
461
+ "key":"amount",
462
+ "value":"2500",
463
+ "type":"text"
464
+ },
465
+ {
466
+ "key":"purpose",
467
+ "value":"FIFA 16",
468
+ "type":"text"
469
+ },
470
+ {
471
+ "key":"send_sms",
472
+ "value":"True",
473
+ "type":"text"
474
+ },
475
+ {
476
+ "key":"send_email",
477
+ "value":"True",
478
+ "type":"text"
479
+ },
480
+ {
481
+ "key":"phone",
482
+ "value":"9999999999",
483
+ "type":"text"
484
+ },
485
+ {
486
+ "key":"email",
487
+ "value":"foo@example.com",
488
+ "type":"text"
489
+ },
490
+ {
491
+ "key":"buyer_name",
492
+ "value":"John Doe",
493
+ "type":"text"
494
+ },
495
+ {
496
+ "key":"redirect_url",
497
+ "value":"http://www.example.com/redirect/",
498
+ "type":"text"
499
+ },
500
+ {
501
+ "key":"webhook",
502
+ "value":"http://www.example.com/webhook/",
503
+ "type":"text"
504
+ },
505
+ {
506
+ "key":"allow_repeated_payments",
507
+ "value":"False",
508
+ "type":"text"
509
+ }
510
+ ],
511
+ "dataMode":"params",
512
+ "timestamp":0,
513
+ "version":2,
514
+ "time":1444116905712
515
+ },
516
+ {
517
+ "collectionId":"cffc6b9e-ab1c-4ba3-411d-fd45c38f671f",
518
+ "id":"ff1f35b0-77d0-6a25-dadc-4fbba09073cf",
519
+ "name":"RAP creation with send_email",
520
+ "description":"If 'send_email' field is passed as True then 'email' field is compulsory.",
521
+ "url":"{{API_SERVER}}/v2/payment_requests/",
522
+ "method":"POST",
523
+ "headers":"Authorization: Bearer {{USER_ACCESS_TOKEN}\n",
524
+ "data":[
525
+ {
526
+ "key":"amount",
527
+ "value":"2500",
528
+ "type":"text"
529
+ },
530
+ {
531
+ "key":"purpose",
532
+ "value":"FIFA 16",
533
+ "type":"text"
534
+ },
535
+ {
536
+ "key":"send_email",
537
+ "value":"True",
538
+ "type":"text"
539
+ },
540
+ {
541
+ "key":"email",
542
+ "value":"foo@example.com",
543
+ "type":"text"
544
+ }
545
+ ],
546
+ "dataMode":"params",
547
+ "timestamp":0,
548
+ "version":2,
549
+ "time":1444116910314
550
+ }
551
+ ]
552
+ }
553
+ ```
554
+
555
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
556
+
557
+ 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` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
558
+
559
+ ## Contributing
560
+
561
+ 1. Fork it ( https://github.com/zambrevishal/instamojo/fork )
562
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
563
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
564
+ 4. Push to the branch (`git push origin my-new-feature`)
565
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "instamojo"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
data/instamojo.gemspec ADDED
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'instamojo/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'rb-instamojo'
8
+ spec.version = Instamojo::VERSION
9
+ spec.authors = ['Vishal Zambre']
10
+ spec.email = ['v.zambre@gmail.com']
11
+
12
+ spec.summary = 'Will provide apis for instamojo payment'
13
+ spec.description = %q(Assists you to programmatically create, edit and delete links on Instamojo.)
14
+ spec.homepage = 'https://github.com/vishalzambre/instamojo-rb'
15
+
16
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
+ # delete this section to allow pushing this gem to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
20
+ else
21
+ fail 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
22
+ end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+ spec.bindir = 'exe'
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ['lib']
29
+ spec.add_development_dependency 'bundler', '~> 1.9'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.3'
32
+ end
data/lib/instamojo.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'instamojo/version'
2
+ require 'instamojo/configuration'
3
+ require 'instamojo/api'
4
+
5
+ # Instamojo lib
6
+ module Instamojo
7
+ class << self
8
+ attr_accessor :configuration
9
+ end
10
+
11
+ def self.configuration
12
+ @configuration ||= Configuration.new
13
+ end
14
+
15
+ def self.reset
16
+ @configuration = Configuration.new
17
+ end
18
+
19
+ def self.configure
20
+ yield(configuration)
21
+ end
22
+ end
@@ -0,0 +1,128 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'net/https'
4
+
5
+ module Instamojo
6
+ # Manage sync call between instamojo
7
+ class API
8
+ attr_accessor :config, :access_token, :refresh_token, :header
9
+
10
+ TEST_URL = 'https://test.instamojo.com'
11
+ LIVE_URL = 'https://instamojo.com'
12
+
13
+ def initialize(config = Instamojo.configuration)
14
+ @config = config
15
+ @header = true
16
+ end
17
+
18
+ # Generate authetication token
19
+ def auth_token
20
+ @access_token = nil
21
+ token(credentials('client_credentials'))
22
+ end
23
+
24
+ # Refresh existing token
25
+ def refresh_token
26
+ token(credentials('refresh_token').merge(refresh_token: @refresh_token))
27
+ end
28
+
29
+ # create new account to instamojo
30
+ def signup(options = {})
31
+ auth_token unless @access_token
32
+ options[:referrer] ||= config.referrer
33
+ @header = true
34
+ signup_url = "#{url}/v2/users/"
35
+ post(signup_url, options)
36
+ end
37
+
38
+ # Generate user access token
39
+ def user_token(options = {})
40
+ token(options.merge(credentials('password')))
41
+ end
42
+
43
+ # Update bank detail to instamojo
44
+ def inrbankaccount(user_id, options = {})
45
+ check_token
46
+ @header = true
47
+ bank_url = "#{url}/v2/users/#{user_id}/inrbankaccount/"
48
+ put(bank_url, options)
49
+ end
50
+
51
+ # Create a payment link
52
+ def payment_link(options = {})
53
+ check_token
54
+ @header = true
55
+ payment_url = "#{url}/v2/payment_requests/"
56
+ post(payment_url, options)
57
+ end
58
+
59
+ # Get detail of payment
60
+ def payment_details(payment_request_id)
61
+ check_token
62
+ payment_url = "#{url}/v2/payment_requests/#{payment_request_id}/"
63
+ @header = true
64
+ get(payment_url)
65
+ end
66
+
67
+ # Get payment status
68
+ def payment_status(payment_request_id)
69
+ check_token
70
+ payment_url = "#{url}/v2/payments/#{payment_request_id}/"
71
+ @header = true
72
+ get(payment_url)
73
+ end
74
+
75
+ private
76
+
77
+ # Generate token
78
+ def token(options)
79
+ @header = false
80
+ auth_url = "#{url}/oauth2/token/"
81
+ response = post(auth_url, options)
82
+ @access_token = response['access_token']
83
+ @refresh_token = response['refresh_token']
84
+ response
85
+ end
86
+
87
+ def credentials(grant_type)
88
+ {
89
+ grant_type: grant_type,
90
+ client_id: config.client_id,
91
+ client_secret: config.client_secret
92
+ }
93
+ end
94
+
95
+ def url
96
+ config.mode == :test ? TEST_URL : LIVE_URL
97
+ end
98
+
99
+ %w(post put get).each do |method|
100
+ define_method "#{method}" do |url, options = {}|
101
+ uri = URI(url)
102
+ req = "Net::HTTP::#{method.titleize}".constantize.new(uri.path)
103
+ headers.each do |key, value|
104
+ req[key] = value
105
+ end
106
+ req.set_form_data(options)
107
+ response =
108
+ Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
109
+ http.request(req)
110
+ end
111
+ JSON.parse(URI.decode(response.body))
112
+ end
113
+ end
114
+
115
+ def headers
116
+ http_header = {
117
+ 'Content-Type' => 'application/x-www-form-urlencoded',
118
+ 'Accept' => 'application/json'
119
+ }
120
+ return http_header unless header || @access_token
121
+ http_header.merge('Authorization' => "Bearer #{@access_token}")
122
+ end
123
+
124
+ def check_token
125
+ fail 'Please generate access token' unless @access_token
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,13 @@
1
+ module Instamojo
2
+ # Store instamojo configs
3
+ class Configuration
4
+ attr_accessor :client_id, :client_secret, :mode
5
+
6
+ def initialize
7
+ @client_id = nil
8
+ @client_secret = nil
9
+ @mode = :test
10
+ @referrer = nil
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module Instamojo
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rb-instamojo
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Vishal Zambre
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-11-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.3'
55
+ description: Assists you to programmatically create, edit and delete links on Instamojo.
56
+ email:
57
+ - v.zambre@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
65
+ - Gemfile
66
+ - README.md
67
+ - Rakefile
68
+ - bin/console
69
+ - bin/setup
70
+ - instamojo.gemspec
71
+ - lib/instamojo.rb
72
+ - lib/instamojo/api.rb
73
+ - lib/instamojo/configuration.rb
74
+ - lib/instamojo/version.rb
75
+ homepage: https://github.com/vishalzambre/instamojo-rb
76
+ licenses: []
77
+ metadata:
78
+ allowed_push_host: https://rubygems.org
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.4.6
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: Will provide apis for instamojo payment
99
+ test_files: []