synapse_pay_rest 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/synapse_pay_rest.rb +3 -1
  4. data/lib/synapse_pay_rest/error.rb +1 -0
  5. data/lib/synapse_pay_rest/http_client.rb +2 -0
  6. data/lib/synapse_pay_rest/models/node/ach_us_node.rb +11 -19
  7. data/lib/synapse_pay_rest/models/node/base_node.rb +88 -17
  8. data/lib/synapse_pay_rest/models/node/eft_ind_node.rb +7 -6
  9. data/lib/synapse_pay_rest/models/node/eft_np_node.rb +3 -4
  10. data/lib/synapse_pay_rest/models/node/iou_node.rb +6 -15
  11. data/lib/synapse_pay_rest/models/node/node.rb +18 -17
  12. data/lib/synapse_pay_rest/models/node/reserve_us_node.rb +5 -11
  13. data/lib/synapse_pay_rest/models/node/synapse_ind_node.rb +4 -8
  14. data/lib/synapse_pay_rest/models/node/synapse_np_node.rb +2 -8
  15. data/lib/synapse_pay_rest/models/node/synapse_us_node.rb +2 -8
  16. data/lib/synapse_pay_rest/models/node/triumph_subaccount_us_node.rb +17 -0
  17. data/lib/synapse_pay_rest/models/node/unverified_node.rb +1 -1
  18. data/lib/synapse_pay_rest/models/node/wire_int_node.rb +3 -4
  19. data/lib/synapse_pay_rest/models/node/wire_us_node.rb +1 -2
  20. data/lib/synapse_pay_rest/models/transaction/transaction.rb +9 -9
  21. data/lib/synapse_pay_rest/models/user/base_document.rb +12 -16
  22. data/lib/synapse_pay_rest/models/user/document.rb +2 -2
  23. data/lib/synapse_pay_rest/models/user/physical_document.rb +58 -17
  24. data/lib/synapse_pay_rest/models/user/user.rb +27 -10
  25. data/lib/synapse_pay_rest/models/user/virtual_document.rb +7 -8
  26. data/lib/synapse_pay_rest/version.rb +1 -1
  27. data/samples.md +41 -60
  28. data/synapse_pay_rest.gemspec +8 -8
  29. metadata +4 -6
  30. data/lib/synapse_pay_rest/models/node/eft_node.rb +0 -27
  31. data/lib/synapse_pay_rest/models/node/synapse_node.rb +0 -25
  32. data/lib/synapse_pay_rest/models/node/wire_node.rb +0 -38
@@ -10,10 +10,9 @@ module SynapsePayRest
10
10
 
11
11
  class << self
12
12
  # @note Do not call this method directly.
13
- def create_from_response(data)
13
+ def from_response(data)
14
14
  virtual_doc = super(data)
15
- require 'pry';
16
- virtual_doc.add_question_set(data['meta']['question_set']) if data['meta']
15
+ virtual_doc.add_question_set(data['meta']['question_set']) if data['status'] == 'SUBMITTED|MFA_PENDING'
17
16
  virtual_doc
18
17
  end
19
18
  end
@@ -30,11 +29,11 @@ module SynapsePayRest
30
29
  #
31
30
  # @todo should raise error if any questions aren't answered yet.
32
31
  def submit_kba
33
- user = base_document.user
34
- response = user.client.users.update(payload: payload_for_kba)
35
- user = User.create_from_response(user.client, response)
36
- base_doc = user.base_documents.find { |doc| doc.id == base_document.id }
37
- ssn_doc = base_doc.virtual_documents.find { |doc| doc.id == id }
32
+ user = base_document.user
33
+ response = user.client.users.update(payload: payload_for_kba)
34
+ user = User.from_response(user.client, response)
35
+ base_doc = user.base_documents.find { |doc| doc.id == base_document.id }
36
+ ssn_doc = base_doc.virtual_documents.find { |doc| doc.id == id }
38
37
  end
39
38
 
40
39
  # Maps question set from response to Question objects.
@@ -1,4 +1,4 @@
1
1
  module SynapsePayRest
2
2
  # gem version
3
- VERSION = '2.0.2'.freeze
3
+ VERSION = '2.1.0'.freeze
4
4
  end
data/samples.md CHANGED
@@ -22,7 +22,6 @@ args = {
22
22
 
23
23
  client = SynapsePayRest::Client.new(args)
24
24
  # => #<SynapsePayRest::Client>
25
-
26
25
  ```
27
26
 
28
27
  ## User Methods
@@ -30,7 +29,6 @@ client = SynapsePayRest::Client.new(args)
30
29
  #### All Users
31
30
 
32
31
  ```ruby
33
-
34
32
  args = {
35
33
  client: client,
36
34
  # (optional) uses API default unless specified
@@ -43,31 +41,25 @@ args = {
43
41
 
44
42
  users = SynapsePayRest::User.all(args)
45
43
  # => [#<SynapsePayRest::User>, #<SynapsePayRest::User>, ...]
46
-
47
44
  ```
48
45
 
49
46
  #### Find a User by User ID
50
47
 
51
48
  ```ruby
52
-
53
49
  user = SynapsePayRest::User.find(client: client, id: '57e97ab786c2737f4ccd4dc1')
54
50
  # => #<SynapsePayRest::User>
55
-
56
51
  ```
57
52
 
58
53
  #### Search for a User by Name/Email
59
54
 
60
55
  ```ruby
61
-
62
56
  users = SynapsePayRest::User.search(client: client, query: 'Steven')
63
57
  # => [#<SynapsePayRest::User>, #<SynapsePayRest::User>, ...]
64
-
65
58
  ```
66
59
 
67
60
  #### Create User
68
61
 
69
62
  ```ruby
70
-
71
63
  user_create_settings = {
72
64
  client: client,
73
65
  logins: [{email: 'steven@synapsepay.com'}],
@@ -77,7 +69,6 @@ user_create_settings = {
77
69
 
78
70
  user = SynapsePayRest::User.create(user_create_settings)
79
71
  # => #<SynapsePayRest::User>
80
-
81
72
  ```
82
73
 
83
74
  #### Update a User's Personal Info
@@ -85,7 +76,6 @@ user = SynapsePayRest::User.create(user_create_settings)
85
76
  Note: this returns a new instance, so remember to reassign the user variable to the method output.
86
77
 
87
78
  ```ruby
88
-
89
79
  user_update_settings = {
90
80
  login: {email: 'newemail@gmail.com'}, # add a login email
91
81
  phone_number: '415-555-5555', # add a phone number
@@ -97,7 +87,6 @@ user_update_settings = {
97
87
  # reassign user to the output because it returns a new instance
98
88
  user = user.update(args)
99
89
  # => #<SynapsePayRest::User>
100
-
101
90
  ```
102
91
 
103
92
  #### Add CIP Base Document to a User
@@ -105,7 +94,6 @@ user = user.update(args)
105
94
  ##### a) User#create_base_document
106
95
 
107
96
  ```ruby
108
-
109
97
  args = {
110
98
  email: 'steven@synapsepay.com',
111
99
  phone_number: '415-555-5555',
@@ -127,13 +115,11 @@ args = {
127
115
  # reassign user to the output because it returns a new instance
128
116
  base_document = user.create_base_document(args)
129
117
  # => #<SynapsePayRest::BaseDocument>
130
-
131
118
  ```
132
119
 
133
120
  ##### b) BaseDocument#create
134
121
 
135
122
  ```ruby
136
-
137
123
  args = {
138
124
  user: user,
139
125
  email: 'steven@synapsepay.com',
@@ -159,13 +145,11 @@ base_doc = SynapsePayRest::BaseDocument.create(args)
159
145
 
160
146
  # reassign user to this if you need the updated user
161
147
  user = base_doc.user
162
-
163
148
  ```
164
149
 
165
150
  #### Update User's Existing Base Document
166
151
 
167
152
  ```ruby
168
-
169
153
  things_to_update = {
170
154
  entity_scope: 'Lawyer',
171
155
  birth_day: 22
@@ -173,28 +157,64 @@ things_to_update = {
173
157
 
174
158
  base_doc = base_doc.update(things_to_update)
175
159
  # => #<SynapsePayRest::BaseDocument>
160
+ ```
161
+
162
+ #### Add a Physical Document to a CIP Base Document using image file path
163
+
164
+ ```ruby
165
+ physical_doc = SynapsePayRest::PhysicalDocument.create(
166
+ type: 'GOVT_ID',
167
+ file_path: '/path/to/file.png'
168
+ )
176
169
 
170
+ # reassign base_doc to the output because it returns a new instance
171
+ base_doc = base_doc.add_physical_documents(physical_doc)
172
+ # => #<SynapsePayRest::BaseDocument>
177
173
  ```
178
174
 
179
- #### Add a Physical Document to a CIP Base Document
175
+ #### Add a Physical Document to a CIP Base Document using image URL
180
176
 
181
177
  ```ruby
178
+ physical_doc = SynapsePayRest::PhysicalDocument.create(
179
+ type: 'GOVT_ID',
180
+ url: 'https://cdn.synapsepay.com/static_assets/logo@2x.png'
181
+ )
182
+
183
+ # reassign base_doc to the output because it returns a new instance
184
+ base_doc = base_doc.add_physical_documents(physical_doc)
185
+ # => #<SynapsePayRest::BaseDocument>
186
+ ```
182
187
 
188
+ #### Add a Physical Document to a CIP Base Document using byte stream
189
+
190
+ ```ruby
183
191
  physical_doc = SynapsePayRest::PhysicalDocument.create(
184
192
  type: 'GOVT_ID',
185
- value: '/path/to/file.png'
193
+ byte_stream: '\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00...',
194
+ mime_type: 'image/png'
186
195
  )
187
196
 
188
197
  # reassign base_doc to the output because it returns a new instance
189
- base_doc = base_doc.add_physical_documents([physical_doc])
198
+ base_doc = base_doc.add_physical_documents(physical_doc)
190
199
  # => #<SynapsePayRest::BaseDocument>
200
+ ```
201
+
202
+ #### Add a Physical Document to a CIP Base Document using base64
203
+
204
+ ```ruby
205
+ physical_doc = SynapsePayRest::PhysicalDocument.create(
206
+ type: 'GOVT_ID',
207
+ value: 'data:image/png;base64,SUQs=='
208
+ )
191
209
 
210
+ # reassign base_doc to the output because it returns a new instance
211
+ base_doc = base_doc.add_physical_documents(physical_doc)
212
+ # => #<SynapsePayRest::BaseDocument>
192
213
  ```
193
214
 
194
215
  #### Add a Social Document to a CIP Base Document
195
216
 
196
217
  ```ruby
197
-
198
218
  social_doc = SynapsePayRest::SocialDocument.create(
199
219
  type: 'FACEBOOK',
200
220
  value: 'facebook.com/sankaet'
@@ -203,13 +223,11 @@ social_doc = SynapsePayRest::SocialDocument.create(
203
223
  # reassign base_doc to the output because it returns a new instance
204
224
  base_doc = base_doc.add_social_documents([social_doc])
205
225
  # => #<SynapsePayRest::BaseDocument>
206
-
207
226
  ```
208
227
 
209
228
  #### Add a Virtual Document to a CIP Base Document
210
229
 
211
230
  ```ruby
212
-
213
231
  virtual_doc = SynapsePayRest::VirtualDocument.create(
214
232
  type: 'SSN',
215
233
  value: '3333'
@@ -218,15 +236,13 @@ virtual_doc = SynapsePayRest::VirtualDocument.create(
218
236
  # reassign base_doc to the output because it returns a new instance
219
237
  base_doc = base_doc.add_virtual_documents([virtual_doc])
220
238
  # => #<SynapsePayRest::BaseDocument>
221
-
222
239
  ```
223
240
 
224
241
  ##### Answer KBA Questions for Virtual Document
225
242
 
226
- If a Virtual Document is returned with status **MFA|PENDING**, you will need to have the user answer some questions:
243
+ If a Virtual Document is returned with status **SUBMITTED|MFA_PENDING**, you will need to have the user answer some questions:
227
244
 
228
245
  ```ruby
229
-
230
246
  # check for any virtual docs with SUBMITTED|MFA_PENDING status
231
247
  virtual_doc = base_doc.virtual_documents.find do |doc|
232
248
  doc.status == 'SUBMITTED|MFA_PENDING'
@@ -251,7 +267,6 @@ virtual_doc = virtual_doc.submit_kba
251
267
 
252
268
  # reassign this if you need the updated base doc
253
269
  base_doc = virtual_doc.base_document
254
-
255
270
  ```
256
271
 
257
272
 
@@ -262,19 +277,15 @@ base_doc = virtual_doc.base_document
262
277
  ##### a) User#nodes
263
278
 
264
279
  ```ruby
265
-
266
280
  nodes = user.nodes(page: 2, per_page: 5, type: 'ACH-US')
267
281
  # => [#<SynapsePayRest::AchUsNode>, #<SynapsePayRest::AchUsNode>, ...]
268
-
269
282
  ```
270
283
 
271
284
  ##### b) Node#all
272
285
 
273
286
  ```ruby
274
-
275
287
  nodes = SynapsePayRest::Node.all(user: user, page: 2, per_page: 5)
276
288
  # => [#<SynapsePayRest::AchUsNode>, #<SynapsePayRest::SynapseUsNode>, ...]
277
-
278
289
  ```
279
290
 
280
291
  #### Find a User's Node by Node ID
@@ -282,19 +293,15 @@ nodes = SynapsePayRest::Node.all(user: user, page: 2, per_page: 5)
282
293
  ##### a) User#find_node
283
294
 
284
295
  ```ruby
285
-
286
296
  node = user.find_node(id: '1a3efa1231as2f')
287
297
  # => #<SynapsePayRest::EftNpNode>
288
-
289
298
  ```
290
299
 
291
300
  ##### b) Node#find
292
301
 
293
302
  ```ruby
294
-
295
303
  node = SynapsePayRest::Node.find(user: user, id: '1a3efa1231as2f')
296
304
  # => #<SynapsePayRest::EftNpNode>
297
-
298
305
  ```
299
306
 
300
307
  #### Create ACH-US Node(s) via Bank Login
@@ -302,7 +309,6 @@ node = SynapsePayRest::Node.find(user: user, id: '1a3efa1231as2f')
302
309
  Returns a collection of `AchUsNode`s associated with the account unless bank requires MFA. Can also use `AchUsNode.create_via_bank_login` with the addition of a `user` argument.
303
310
 
304
311
  ```ruby
305
-
306
312
  login_info = {
307
313
  bank_name: 'bofa',
308
314
  username: 'synapse_good',
@@ -312,7 +318,6 @@ login_info = {
312
318
  nodes = user.create_ach_us_nodes_via_bank_login(login_info)
313
319
  # => [#<SynapsePayRest::AchUsNode>, ...] if no MFA
314
320
  # => SynapsePayRest::UnverifiedNode if MFA
315
-
316
321
  ```
317
322
 
318
323
  ##### Verify Bank Login MFA
@@ -320,7 +325,6 @@ nodes = user.create_ach_us_nodes_via_bank_login(login_info)
320
325
  If the bank requires MFA, you will need to resolve the MFA question(s):
321
326
 
322
327
  ```ruby
323
-
324
328
  nodes.mfa_verified
325
329
  # => false
326
330
 
@@ -334,7 +338,6 @@ nodes = nodes.answer_mfa('test_answer')
334
338
 
335
339
  nodes.mfa_verified
336
340
  # => true
337
-
338
341
  ```
339
342
 
340
343
  #### Create ACH-US Node via Account/Routing Number
@@ -342,7 +345,6 @@ nodes.mfa_verified
342
345
  Can also use `AchUsNode.create` with the addition of a `user` argument.
343
346
 
344
347
  ```ruby
345
-
346
348
  account_info = {
347
349
  nickname: 'Primary Joint Checking',
348
350
  account_number: '2222222222',
@@ -353,7 +355,6 @@ account_info = {
353
355
 
354
356
  node = user.create_ach_us_node(account_info)
355
357
  # => #<SynapsePayRest::AchUsNode>
356
-
357
358
  ```
358
359
 
359
360
  ##### Verify Microdeposits
@@ -361,10 +362,8 @@ node = user.create_ach_us_node(account_info)
361
362
  `ACH-US Node`s added by account/routing must be verified with microdeposits:
362
363
 
363
364
  ```ruby
364
-
365
365
  node = node.verify_microdeposits(amount1: 0.1, amount2: 0.1)
366
366
  # => #<SynapsePayRest::AchUsNode>
367
-
368
367
  ```
369
368
 
370
369
  #### Deactivate a Node
@@ -372,10 +371,8 @@ node = node.verify_microdeposits(amount1: 0.1, amount2: 0.1)
372
371
  This deactivates the node. It does not automatically cancel any transactions already underway.
373
372
 
374
373
  ```ruby
375
-
376
374
  node.deactivate
377
375
  # => :success
378
-
379
376
  ```
380
377
 
381
378
 
@@ -386,19 +383,15 @@ node.deactivate
386
383
  ##### a) Node#transactions
387
384
 
388
385
  ```ruby
389
-
390
386
  transactions = node.transactions(page: 1, per_page: 15)
391
387
  # => [#<SynapsePayRest::Transaction>, #<SynapsePayRest::Transaction>, ...]
392
-
393
388
  ```
394
389
 
395
390
  ##### b) Transaction#all
396
391
 
397
392
  ```ruby
398
-
399
393
  transactions = SynapsePayRest::Transaction.all(node: node, page: 1, per_page: 15)
400
394
  # => [#<SynapsePayRest::Transaction>, #<SynapsePayRest::Transaction>, ...]
401
-
402
395
  ```
403
396
 
404
397
  #### Find a Node's Transaction by ID
@@ -406,19 +399,15 @@ transactions = SynapsePayRest::Transaction.all(node: node, page: 1, per_page: 15
406
399
  ##### a) Node#find_transaction
407
400
 
408
401
  ```ruby
409
-
410
402
  transaction = node.find_transaction(id: '167e11516')
411
403
  # => #<SynapsePayRest::Transaction>
412
-
413
404
  ```
414
405
 
415
406
  ##### b) Transaction#find
416
407
 
417
408
  ```ruby
418
-
419
409
  transaction = SynapsePayRest::Transaction.find(node: node, id: '57fab7d186c2733525dd7eac')
420
410
  # => #<SynapsePayRest::Transaction>
421
-
422
411
  ```
423
412
 
424
413
  #### Create a Transaction
@@ -426,7 +415,6 @@ transaction = SynapsePayRest::Transaction.find(node: node, id: '57fab7d186c27335
426
415
  ##### a) Node#create_transaction
427
416
 
428
417
  ```ruby
429
-
430
418
  transaction_settings = {
431
419
  to_type: 'ACH-US',
432
420
  to_id: '57fab4b286c2732210c73486',
@@ -437,13 +425,11 @@ transaction_settings = {
437
425
 
438
426
  transaction = node.create_transaction(transaction_settings)
439
427
  # => #<SynapsePayRest::Transaction>
440
-
441
428
  ```
442
429
 
443
430
  ##### b) Transaction#create
444
431
 
445
432
  ```ruby
446
-
447
433
  transaction_settings = {
448
434
  node: node,
449
435
  to_type: 'ACH-US',
@@ -455,23 +441,18 @@ transaction_settings = {
455
441
 
456
442
  transaction = SynapsePayRest::Transaction.create(transaction_settings)
457
443
  # => #<SynapsePayRest::Transaction>
458
-
459
444
  ```
460
445
 
461
446
  #### Add a Comment to a Transaction's Status
462
447
 
463
448
  ```ruby
464
-
465
449
  transaction = transaction.add_comment('this is my favorite transaction')
466
450
  # => #<SynapsePayRest::Transaction>
467
-
468
451
  ```
469
452
 
470
453
  #### Cancel a Transaction
471
454
 
472
455
  ```ruby
473
-
474
456
  transaction = transaction.cancel
475
457
  # => #<SynapsePayRest::Transaction>
476
-
477
458
  ```
@@ -3,14 +3,14 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'synapse_pay_rest/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = 'synapse_pay_rest'
7
- s.version = SynapsePayRest::VERSION
8
- s.date = Date.today.to_s
9
- s.authors = ['Thomas Hipps', 'Steven Broderick']
10
- s.email = 'help@synapsepay.com'
11
- s.summary = 'SynapsePay v3 Rest Native API Library'
12
- s.homepage = 'https://rubygems.org/gems/synapse_pay_rest'
13
- s.license = 'MIT'
6
+ s.name = 'synapse_pay_rest'
7
+ s.version = SynapsePayRest::VERSION
8
+ s.date = Date.today.to_s
9
+ s.authors = ['Steven Broderick', 'Thomas Hipps']
10
+ s.email = 'help@synapsepay.com'
11
+ s.summary = 'SynapsePay v3 Rest Native API Library'
12
+ s.homepage = 'https://rubygems.org/gems/synapse_pay_rest'
13
+ s.license = 'MIT'
14
14
 
15
15
  s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
16
  s.bindir = 'exe'