processout 2.13.0 → 2.15.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +5 -5
  2. data/lib/processout/activity.rb +14 -0
  3. data/lib/processout/addon.rb +21 -0
  4. data/lib/processout/api_request.rb +21 -0
  5. data/lib/processout/api_version.rb +10 -0
  6. data/lib/processout/card.rb +79 -0
  7. data/lib/processout/card_information.rb +14 -0
  8. data/lib/processout/coupon.rb +20 -0
  9. data/lib/processout/customer.rb +62 -24
  10. data/lib/processout/customer_action.rb +9 -0
  11. data/lib/processout/discount.rb +21 -0
  12. data/lib/processout/dunning_action.rb +9 -0
  13. data/lib/processout/event.rb +14 -31
  14. data/lib/processout/gateway.rb +18 -0
  15. data/lib/processout/gateway_configuration.rb +18 -0
  16. data/lib/processout/invoice.rb +166 -2
  17. data/lib/processout/invoice_detail.rb +22 -0
  18. data/lib/processout/invoice_device.rb +20 -0
  19. data/lib/processout/invoice_external_fraud_tools.rb +70 -0
  20. data/lib/processout/invoice_risk.rb +9 -0
  21. data/lib/processout/invoice_shipping.rb +19 -0
  22. data/lib/processout/invoice_tax.rb +81 -0
  23. data/lib/processout/networking/request.rb +1 -1
  24. data/lib/processout/payment_data_network_authentication.rb +8 -0
  25. data/lib/processout/payment_data_three_ds_authentication.rb +8 -0
  26. data/lib/processout/payment_data_three_ds_request.rb +11 -0
  27. data/lib/processout/payout.rb +27 -0
  28. data/lib/processout/payout_item.rb +20 -0
  29. data/lib/processout/plan.rb +21 -0
  30. data/lib/processout/product.rb +19 -0
  31. data/lib/processout/project.rb +18 -27
  32. data/lib/processout/refund.rb +17 -0
  33. data/lib/processout/subscription.rb +42 -0
  34. data/lib/processout/three_ds.rb +158 -0
  35. data/lib/processout/token.rb +93 -30
  36. data/lib/processout/transaction.rb +113 -0
  37. data/lib/processout/transaction_operation.rb +52 -0
  38. data/lib/processout/version.rb +1 -1
  39. data/lib/processout/webhook.rb +21 -0
  40. data/lib/processout/webhook_endpoint.rb +14 -0
  41. data/lib/processout.rb +18 -0
  42. metadata +6 -4
@@ -1,6 +1,7 @@
1
1
  # The content of this file was automatically generated
2
2
 
3
3
  require "cgi"
4
+ require "json"
4
5
  require "processout/networking/request"
5
6
  require "processout/networking/response"
6
7
 
@@ -37,6 +38,14 @@ module ProcessOut
37
38
  CustomerAction.new(@client, data)
38
39
  end
39
40
 
41
+ # Overrides the JSON marshaller to only send the fields we want
42
+ def to_json(options)
43
+ {
44
+ "type": self.type,
45
+ "value": self.value,
46
+ }.to_json
47
+ end
48
+
40
49
  # Fills the object with data coming from the API
41
50
  # Params:
42
51
  # +data+:: +Hash+ of data coming from the API
@@ -1,6 +1,7 @@
1
1
  # The content of this file was automatically generated
2
2
 
3
3
  require "cgi"
4
+ require "json"
4
5
  require "processout/networking/request"
5
6
  require "processout/networking/response"
6
7
 
@@ -145,6 +146,26 @@ module ProcessOut
145
146
  Discount.new(@client, data)
146
147
  end
147
148
 
149
+ # Overrides the JSON marshaller to only send the fields we want
150
+ def to_json(options)
151
+ {
152
+ "id": self.id,
153
+ "project": self.project,
154
+ "project_id": self.project_id,
155
+ "subscription": self.subscription,
156
+ "subscription_id": self.subscription_id,
157
+ "coupon": self.coupon,
158
+ "coupon_id": self.coupon_id,
159
+ "name": self.name,
160
+ "amount": self.amount,
161
+ "percent": self.percent,
162
+ "expires_at": self.expires_at,
163
+ "metadata": self.metadata,
164
+ "sandbox": self.sandbox,
165
+ "created_at": self.created_at,
166
+ }.to_json
167
+ end
168
+
148
169
  # Fills the object with data coming from the API
149
170
  # Params:
150
171
  # +data+:: +Hash+ of data coming from the API
@@ -1,6 +1,7 @@
1
1
  # The content of this file was automatically generated
2
2
 
3
3
  require "cgi"
4
+ require "json"
4
5
  require "processout/networking/request"
5
6
  require "processout/networking/response"
6
7
 
@@ -37,6 +38,14 @@ module ProcessOut
37
38
  DunningAction.new(@client, data)
38
39
  end
39
40
 
41
+ # Overrides the JSON marshaller to only send the fields we want
42
+ def to_json(options)
43
+ {
44
+ "action": self.action,
45
+ "delay_in_days": self.delay_in_days,
46
+ }.to_json
47
+ end
48
+
40
49
  # Fills the object with data coming from the API
41
50
  # Params:
42
51
  # +data+:: +Hash+ of data coming from the API
@@ -1,6 +1,7 @@
1
1
  # The content of this file was automatically generated
2
2
 
3
3
  require "cgi"
4
+ require "json"
4
5
  require "processout/networking/request"
5
6
  require "processout/networking/response"
6
7
 
@@ -80,6 +81,19 @@ module ProcessOut
80
81
  Event.new(@client, data)
81
82
  end
82
83
 
84
+ # Overrides the JSON marshaller to only send the fields we want
85
+ def to_json(options)
86
+ {
87
+ "id": self.id,
88
+ "project": self.project,
89
+ "project_id": self.project_id,
90
+ "name": self.name,
91
+ "data": self.data,
92
+ "sandbox": self.sandbox,
93
+ "fired_at": self.fired_at,
94
+ }.to_json
95
+ end
96
+
83
97
  # Fills the object with data coming from the API
84
98
  # Params:
85
99
  # +data+:: +Hash+ of data coming from the API
@@ -215,37 +229,6 @@ module ProcessOut
215
229
 
216
230
 
217
231
 
218
- return_values[0]
219
- end
220
-
221
- # Find an event by the Resource ID that generated it.
222
- # Params:
223
- # +resource_id+:: Resource ID
224
- # +options+:: +Hash+ of options
225
- def find_by_resource_id(resource_id, options = {})
226
- self.prefill(options)
227
-
228
- request = Request.new(@client)
229
- path = "/events/by_resource_id/" + CGI.escape(resource_id) + ""
230
- data = {
231
-
232
- }
233
-
234
- response = Response.new(request.get(path, data, options))
235
- return_values = Array.new
236
-
237
- a = Array.new
238
- body = response.body
239
- for v in body['events']
240
- tmp = Event.new(@client)
241
- tmp.fill_with_data(v)
242
- a.push(tmp)
243
- end
244
-
245
- return_values.push(a)
246
-
247
-
248
-
249
232
  return_values[0]
250
233
  end
251
234
 
@@ -1,6 +1,7 @@
1
1
  # The content of this file was automatically generated
2
2
 
3
3
  require "cgi"
4
+ require "json"
4
5
  require "processout/networking/request"
5
6
  require "processout/networking/response"
6
7
 
@@ -91,6 +92,23 @@ module ProcessOut
91
92
  Gateway.new(@client, data)
92
93
  end
93
94
 
95
+ # Overrides the JSON marshaller to only send the fields we want
96
+ def to_json(options)
97
+ {
98
+ "id": self.id,
99
+ "name": self.name,
100
+ "display_name": self.display_name,
101
+ "logo_url": self.logo_url,
102
+ "url": self.url,
103
+ "flows": self.flows,
104
+ "tags": self.tags,
105
+ "can_pull_transactions": self.can_pull_transactions,
106
+ "can_refund": self.can_refund,
107
+ "is_oauth_authentication": self.is_oauth_authentication,
108
+ "description": self.description,
109
+ }.to_json
110
+ end
111
+
94
112
  # Fills the object with data coming from the API
95
113
  # Params:
96
114
  # +data+:: +Hash+ of data coming from the API
@@ -1,6 +1,7 @@
1
1
  # The content of this file was automatically generated
2
2
 
3
3
  require "cgi"
4
+ require "json"
4
5
  require "processout/networking/request"
5
6
  require "processout/networking/response"
6
7
 
@@ -115,6 +116,23 @@ module ProcessOut
115
116
  GatewayConfiguration.new(@client, data)
116
117
  end
117
118
 
119
+ # Overrides the JSON marshaller to only send the fields we want
120
+ def to_json(options)
121
+ {
122
+ "id": self.id,
123
+ "project": self.project,
124
+ "project_id": self.project_id,
125
+ "gateway": self.gateway,
126
+ "gateway_id": self.gateway_id,
127
+ "name": self.name,
128
+ "default_currency": self.default_currency,
129
+ "enabled": self.enabled,
130
+ "public_keys": self.public_keys,
131
+ "created_at": self.created_at,
132
+ "enabled_at": self.enabled_at,
133
+ }.to_json
134
+ end
135
+
118
136
  # Fills the object with data coming from the API
119
137
  # Params:
120
138
  # +data+:: +Hash+ of data coming from the API
@@ -1,6 +1,7 @@
1
1
  # The content of this file was automatically generated
2
2
 
3
3
  require "cgi"
4
+ require "json"
4
5
  require "processout/networking/request"
5
6
  require "processout/networking/response"
6
7
 
@@ -40,6 +41,12 @@ module ProcessOut
40
41
  attr_reader :risk
41
42
  attr_reader :shipping
42
43
  attr_reader :device
44
+ attr_reader :external_fraud_tools
45
+ attr_reader :exemption_reason_3ds2
46
+ attr_reader :sca_exemption_reason
47
+ attr_reader :challenge_indicator
48
+ attr_reader :incremental
49
+ attr_reader :tax
43
50
 
44
51
 
45
52
  def id=(val)
@@ -286,6 +293,54 @@ module ProcessOut
286
293
 
287
294
  end
288
295
 
296
+ def external_fraud_tools=(val)
297
+ if val.nil?
298
+ @external_fraud_tools = val
299
+ return
300
+ end
301
+
302
+ if val.instance_of? InvoiceExternalFraudTools
303
+ @external_fraud_tools = val
304
+ else
305
+ obj = InvoiceExternalFraudTools.new(@client)
306
+ obj.fill_with_data(val)
307
+ @external_fraud_tools = obj
308
+ end
309
+
310
+ end
311
+
312
+ def exemption_reason_3ds2=(val)
313
+ @exemption_reason_3ds2 = val
314
+ end
315
+
316
+ def sca_exemption_reason=(val)
317
+ @sca_exemption_reason = val
318
+ end
319
+
320
+ def challenge_indicator=(val)
321
+ @challenge_indicator = val
322
+ end
323
+
324
+ def incremental=(val)
325
+ @incremental = val
326
+ end
327
+
328
+ def tax=(val)
329
+ if val.nil?
330
+ @tax = val
331
+ return
332
+ end
333
+
334
+ if val.instance_of? InvoiceTax
335
+ @tax = val
336
+ else
337
+ obj = InvoiceTax.new(@client)
338
+ obj.fill_with_data(val)
339
+ @tax = obj
340
+ end
341
+
342
+ end
343
+
289
344
 
290
345
  # Initializes the Invoice object
291
346
  # Params:
@@ -327,6 +382,12 @@ module ProcessOut
327
382
  self.risk = data.fetch(:risk, nil)
328
383
  self.shipping = data.fetch(:shipping, nil)
329
384
  self.device = data.fetch(:device, nil)
385
+ self.external_fraud_tools = data.fetch(:external_fraud_tools, nil)
386
+ self.exemption_reason_3ds2 = data.fetch(:exemption_reason_3ds2, nil)
387
+ self.sca_exemption_reason = data.fetch(:sca_exemption_reason, nil)
388
+ self.challenge_indicator = data.fetch(:challenge_indicator, nil)
389
+ self.incremental = data.fetch(:incremental, nil)
390
+ self.tax = data.fetch(:tax, nil)
330
391
 
331
392
  end
332
393
 
@@ -335,6 +396,51 @@ module ProcessOut
335
396
  Invoice.new(@client, data)
336
397
  end
337
398
 
399
+ # Overrides the JSON marshaller to only send the fields we want
400
+ def to_json(options)
401
+ {
402
+ "id": self.id,
403
+ "project": self.project,
404
+ "project_id": self.project_id,
405
+ "transaction": self.transaction,
406
+ "transaction_id": self.transaction_id,
407
+ "customer": self.customer,
408
+ "customer_id": self.customer_id,
409
+ "subscription": self.subscription,
410
+ "subscription_id": self.subscription_id,
411
+ "token": self.token,
412
+ "token_id": self.token_id,
413
+ "details": self.details,
414
+ "url": self.url,
415
+ "name": self.name,
416
+ "amount": self.amount,
417
+ "currency": self.currency,
418
+ "merchant_initiator_type": self.merchant_initiator_type,
419
+ "statement_descriptor": self.statement_descriptor,
420
+ "statement_descriptor_phone": self.statement_descriptor_phone,
421
+ "statement_descriptor_city": self.statement_descriptor_city,
422
+ "statement_descriptor_company": self.statement_descriptor_company,
423
+ "statement_descriptor_url": self.statement_descriptor_url,
424
+ "metadata": self.metadata,
425
+ "gateway_data": self.gateway_data,
426
+ "return_url": self.return_url,
427
+ "cancel_url": self.cancel_url,
428
+ "webhook_url": self.webhook_url,
429
+ "require_backend_capture": self.require_backend_capture,
430
+ "sandbox": self.sandbox,
431
+ "created_at": self.created_at,
432
+ "risk": self.risk,
433
+ "shipping": self.shipping,
434
+ "device": self.device,
435
+ "external_fraud_tools": self.external_fraud_tools,
436
+ "exemption_reason_3ds2": self.exemption_reason_3ds2,
437
+ "sca_exemption_reason": self.sca_exemption_reason,
438
+ "challenge_indicator": self.challenge_indicator,
439
+ "incremental": self.incremental,
440
+ "tax": self.tax,
441
+ }.to_json
442
+ end
443
+
338
444
  # Fills the object with data coming from the API
339
445
  # Params:
340
446
  # +data+:: +Hash+ of data coming from the API
@@ -441,6 +547,24 @@ module ProcessOut
441
547
  if data.include? "device"
442
548
  self.device = data["device"]
443
549
  end
550
+ if data.include? "external_fraud_tools"
551
+ self.external_fraud_tools = data["external_fraud_tools"]
552
+ end
553
+ if data.include? "exemption_reason_3ds2"
554
+ self.exemption_reason_3ds2 = data["exemption_reason_3ds2"]
555
+ end
556
+ if data.include? "sca_exemption_reason"
557
+ self.sca_exemption_reason = data["sca_exemption_reason"]
558
+ end
559
+ if data.include? "challenge_indicator"
560
+ self.challenge_indicator = data["challenge_indicator"]
561
+ end
562
+ if data.include? "incremental"
563
+ self.incremental = data["incremental"]
564
+ end
565
+ if data.include? "tax"
566
+ self.tax = data["tax"]
567
+ end
444
568
 
445
569
  self
446
570
  end
@@ -485,10 +609,41 @@ module ProcessOut
485
609
  self.risk = data.fetch(:risk, self.risk)
486
610
  self.shipping = data.fetch(:shipping, self.shipping)
487
611
  self.device = data.fetch(:device, self.device)
612
+ self.external_fraud_tools = data.fetch(:external_fraud_tools, self.external_fraud_tools)
613
+ self.exemption_reason_3ds2 = data.fetch(:exemption_reason_3ds2, self.exemption_reason_3ds2)
614
+ self.sca_exemption_reason = data.fetch(:sca_exemption_reason, self.sca_exemption_reason)
615
+ self.challenge_indicator = data.fetch(:challenge_indicator, self.challenge_indicator)
616
+ self.incremental = data.fetch(:incremental, self.incremental)
617
+ self.tax = data.fetch(:tax, self.tax)
488
618
 
489
619
  self
490
620
  end
491
621
 
622
+ # Create an incremental authorization
623
+ # Params:
624
+ # +amount+:: Amount to increment authorization by
625
+ # +options+:: +Hash+ of options
626
+ def increment_authorization(amount, options = {})
627
+ self.prefill(options)
628
+
629
+ request = Request.new(@client)
630
+ path = "/invoices/" + CGI.escape(@id) + "/increment_authorization"
631
+ data = {
632
+ "amount" => amount
633
+ }
634
+
635
+ response = Response.new(request.post(path, data, options))
636
+ return_values = Array.new
637
+
638
+ body = response.body
639
+ body = body["transaction"]
640
+ transaction = Transaction.new(@client)
641
+ return_values.push(transaction.fill_with_data(body))
642
+
643
+
644
+ return_values[0]
645
+ end
646
+
492
647
  # Authorize the invoice using the given source (customer or token)
493
648
  # Params:
494
649
  # +source+:: Source used to authorization the payment. Can be a card, a token or a gateway request
@@ -499,6 +654,8 @@ module ProcessOut
499
654
  request = Request.new(@client)
500
655
  path = "/invoices/" + CGI.escape(@id) + "/authorize"
501
656
  data = {
657
+ "device" => @device,
658
+ "incremental" => @incremental,
502
659
  "synchronous" => options.fetch(:synchronous, nil),
503
660
  "retry_drop_liability_shift" => options.fetch(:retry_drop_liability_shift, nil),
504
661
  "capture_amount" => options.fetch(:capture_amount, nil),
@@ -529,6 +686,8 @@ module ProcessOut
529
686
  request = Request.new(@client)
530
687
  path = "/invoices/" + CGI.escape(@id) + "/capture"
531
688
  data = {
689
+ "device" => @device,
690
+ "incremental" => @incremental,
532
691
  "authorize_only" => options.fetch(:authorize_only, nil),
533
692
  "synchronous" => options.fetch(:synchronous, nil),
534
693
  "retry_drop_liability_shift" => options.fetch(:retry_drop_liability_shift, nil),
@@ -716,9 +875,12 @@ module ProcessOut
716
875
  "name" => @name,
717
876
  "amount" => @amount,
718
877
  "currency" => @currency,
719
- "gateway_data" => @gateway_data,
720
878
  "metadata" => @metadata,
721
879
  "details" => @details,
880
+ "exemption_reason_3ds2" => @exemption_reason_3ds2,
881
+ "sca_exemption_reason" => @sca_exemption_reason,
882
+ "challenge_indicator" => @challenge_indicator,
883
+ "gateway_data" => @gateway_data,
722
884
  "merchant_initiator_type" => @merchant_initiator_type,
723
885
  "statement_descriptor" => @statement_descriptor,
724
886
  "statement_descriptor_phone" => @statement_descriptor_phone,
@@ -731,7 +893,9 @@ module ProcessOut
731
893
  "risk" => @risk,
732
894
  "shipping" => @shipping,
733
895
  "device" => @device,
734
- "require_backend_capture" => @require_backend_capture
896
+ "require_backend_capture" => @require_backend_capture,
897
+ "external_fraud_tools" => @external_fraud_tools,
898
+ "tax" => @tax
735
899
  }
736
900
 
737
901
  response = Response.new(request.post(path, data, options))