synapse_pay_rest 2.0.2 → 2.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.
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'