processout 2.20.0 → 2.21.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 +4 -4
- data/.gitignore +52 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Dockerfile +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/Makefile +4 -0
- data/README.md +12 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/processout/activity.rb +206 -0
- data/lib/processout/addon.rb +401 -0
- data/lib/processout/alternative_merchant_certificate.rb +115 -0
- data/lib/processout/api_request.rb +295 -0
- data/lib/processout/api_version.rb +92 -0
- data/lib/processout/apple_pay_alternative_merchant_certificates.rb +121 -0
- data/lib/processout/balance.rb +92 -0
- data/lib/processout/balances.rb +111 -0
- data/lib/processout/card.rb +503 -0
- data/lib/processout/card_information.rb +164 -0
- data/lib/processout/coupon.rb +352 -0
- data/lib/processout/customer.rb +755 -0
- data/lib/processout/customer_action.rb +81 -0
- data/lib/processout/discount.rb +360 -0
- data/lib/processout/dunning_action.rb +81 -0
- data/lib/processout/errors/authentication_error.rb +9 -0
- data/lib/processout/errors/generic_error.rb +9 -0
- data/lib/processout/errors/internal_error.rb +9 -0
- data/lib/processout/errors/notfound_error.rb +9 -0
- data/lib/processout/errors/validation_error.rb +9 -0
- data/lib/processout/event.rb +237 -0
- data/lib/processout/gateway.rb +210 -0
- data/lib/processout/gateway_configuration.rb +346 -0
- data/lib/processout/gateway_request.rb +26 -0
- data/lib/processout/invoice.rb +984 -0
- data/lib/processout/invoice_detail.rb +235 -0
- data/lib/processout/invoice_device.rb +92 -0
- data/lib/processout/invoice_external_fraud_tools.rb +70 -0
- data/lib/processout/invoice_risk.rb +81 -0
- data/lib/processout/invoice_shipping.rb +202 -0
- data/lib/processout/invoice_tax.rb +81 -0
- data/lib/processout/networking/request.rb +102 -0
- data/lib/processout/networking/response.rb +67 -0
- data/lib/processout/payment_data_network_authentication.rb +70 -0
- data/lib/processout/payment_data_three_ds_authentication.rb +70 -0
- data/lib/processout/payment_data_three_ds_request.rb +103 -0
- data/lib/processout/payout.rb +379 -0
- data/lib/processout/payout_item.rb +238 -0
- data/lib/processout/plan.rb +368 -0
- data/lib/processout/product.rb +368 -0
- data/lib/processout/project.rb +353 -0
- data/lib/processout/refund.rb +277 -0
- data/lib/processout/subscription.rb +910 -0
- data/lib/processout/three_ds.rb +158 -0
- data/lib/processout/token.rb +493 -0
- data/lib/processout/transaction.rb +905 -0
- data/lib/processout/transaction_operation.rb +418 -0
- data/lib/processout/version.rb +3 -0
- data/lib/processout/webhook.rb +237 -0
- data/lib/processout/webhook_endpoint.rb +149 -0
- data/lib/processout.rb +263 -0
- data/processout.gemspec +26 -0
- metadata +66 -3
@@ -0,0 +1,401 @@
|
|
1
|
+
# The content of this file was automatically generated
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
require "json"
|
5
|
+
require "processout/networking/request"
|
6
|
+
require "processout/networking/response"
|
7
|
+
|
8
|
+
module ProcessOut
|
9
|
+
class Addon
|
10
|
+
|
11
|
+
attr_reader :id
|
12
|
+
attr_reader :project
|
13
|
+
attr_reader :project_id
|
14
|
+
attr_reader :subscription
|
15
|
+
attr_reader :subscription_id
|
16
|
+
attr_reader :plan
|
17
|
+
attr_reader :plan_id
|
18
|
+
attr_reader :type
|
19
|
+
attr_reader :name
|
20
|
+
attr_reader :amount
|
21
|
+
attr_reader :quantity
|
22
|
+
attr_reader :metadata
|
23
|
+
attr_reader :sandbox
|
24
|
+
attr_reader :created_at
|
25
|
+
|
26
|
+
|
27
|
+
def id=(val)
|
28
|
+
@id = val
|
29
|
+
end
|
30
|
+
|
31
|
+
def project=(val)
|
32
|
+
if val.nil?
|
33
|
+
@project = val
|
34
|
+
return
|
35
|
+
end
|
36
|
+
|
37
|
+
if val.instance_of? Project
|
38
|
+
@project = val
|
39
|
+
else
|
40
|
+
obj = Project.new(@client)
|
41
|
+
obj.fill_with_data(val)
|
42
|
+
@project = obj
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
def project_id=(val)
|
48
|
+
@project_id = val
|
49
|
+
end
|
50
|
+
|
51
|
+
def subscription=(val)
|
52
|
+
if val.nil?
|
53
|
+
@subscription = val
|
54
|
+
return
|
55
|
+
end
|
56
|
+
|
57
|
+
if val.instance_of? Subscription
|
58
|
+
@subscription = val
|
59
|
+
else
|
60
|
+
obj = Subscription.new(@client)
|
61
|
+
obj.fill_with_data(val)
|
62
|
+
@subscription = obj
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
def subscription_id=(val)
|
68
|
+
@subscription_id = val
|
69
|
+
end
|
70
|
+
|
71
|
+
def plan=(val)
|
72
|
+
if val.nil?
|
73
|
+
@plan = val
|
74
|
+
return
|
75
|
+
end
|
76
|
+
|
77
|
+
if val.instance_of? Plan
|
78
|
+
@plan = val
|
79
|
+
else
|
80
|
+
obj = Plan.new(@client)
|
81
|
+
obj.fill_with_data(val)
|
82
|
+
@plan = obj
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
def plan_id=(val)
|
88
|
+
@plan_id = val
|
89
|
+
end
|
90
|
+
|
91
|
+
def type=(val)
|
92
|
+
@type = val
|
93
|
+
end
|
94
|
+
|
95
|
+
def name=(val)
|
96
|
+
@name = val
|
97
|
+
end
|
98
|
+
|
99
|
+
def amount=(val)
|
100
|
+
@amount = val
|
101
|
+
end
|
102
|
+
|
103
|
+
def quantity=(val)
|
104
|
+
@quantity = val
|
105
|
+
end
|
106
|
+
|
107
|
+
def metadata=(val)
|
108
|
+
@metadata = val
|
109
|
+
end
|
110
|
+
|
111
|
+
def sandbox=(val)
|
112
|
+
@sandbox = val
|
113
|
+
end
|
114
|
+
|
115
|
+
def created_at=(val)
|
116
|
+
@created_at = val
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
# Initializes the Addon object
|
121
|
+
# Params:
|
122
|
+
# +client+:: +ProcessOut+ client instance
|
123
|
+
# +data+:: data that can be used to fill the object
|
124
|
+
def initialize(client, data = {})
|
125
|
+
@client = client
|
126
|
+
|
127
|
+
self.id = data.fetch(:id, nil)
|
128
|
+
self.project = data.fetch(:project, nil)
|
129
|
+
self.project_id = data.fetch(:project_id, nil)
|
130
|
+
self.subscription = data.fetch(:subscription, nil)
|
131
|
+
self.subscription_id = data.fetch(:subscription_id, nil)
|
132
|
+
self.plan = data.fetch(:plan, nil)
|
133
|
+
self.plan_id = data.fetch(:plan_id, nil)
|
134
|
+
self.type = data.fetch(:type, nil)
|
135
|
+
self.name = data.fetch(:name, nil)
|
136
|
+
self.amount = data.fetch(:amount, nil)
|
137
|
+
self.quantity = data.fetch(:quantity, nil)
|
138
|
+
self.metadata = data.fetch(:metadata, nil)
|
139
|
+
self.sandbox = data.fetch(:sandbox, nil)
|
140
|
+
self.created_at = data.fetch(:created_at, nil)
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
# Create a new Addon using the current client
|
145
|
+
def new(data = {})
|
146
|
+
Addon.new(@client, data)
|
147
|
+
end
|
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
|
+
"plan": self.plan,
|
158
|
+
"plan_id": self.plan_id,
|
159
|
+
"type": self.type,
|
160
|
+
"name": self.name,
|
161
|
+
"amount": self.amount,
|
162
|
+
"quantity": self.quantity,
|
163
|
+
"metadata": self.metadata,
|
164
|
+
"sandbox": self.sandbox,
|
165
|
+
"created_at": self.created_at,
|
166
|
+
}.to_json
|
167
|
+
end
|
168
|
+
|
169
|
+
# Fills the object with data coming from the API
|
170
|
+
# Params:
|
171
|
+
# +data+:: +Hash+ of data coming from the API
|
172
|
+
def fill_with_data(data)
|
173
|
+
if data.nil?
|
174
|
+
return self
|
175
|
+
end
|
176
|
+
if data.include? "id"
|
177
|
+
self.id = data["id"]
|
178
|
+
end
|
179
|
+
if data.include? "project"
|
180
|
+
self.project = data["project"]
|
181
|
+
end
|
182
|
+
if data.include? "project_id"
|
183
|
+
self.project_id = data["project_id"]
|
184
|
+
end
|
185
|
+
if data.include? "subscription"
|
186
|
+
self.subscription = data["subscription"]
|
187
|
+
end
|
188
|
+
if data.include? "subscription_id"
|
189
|
+
self.subscription_id = data["subscription_id"]
|
190
|
+
end
|
191
|
+
if data.include? "plan"
|
192
|
+
self.plan = data["plan"]
|
193
|
+
end
|
194
|
+
if data.include? "plan_id"
|
195
|
+
self.plan_id = data["plan_id"]
|
196
|
+
end
|
197
|
+
if data.include? "type"
|
198
|
+
self.type = data["type"]
|
199
|
+
end
|
200
|
+
if data.include? "name"
|
201
|
+
self.name = data["name"]
|
202
|
+
end
|
203
|
+
if data.include? "amount"
|
204
|
+
self.amount = data["amount"]
|
205
|
+
end
|
206
|
+
if data.include? "quantity"
|
207
|
+
self.quantity = data["quantity"]
|
208
|
+
end
|
209
|
+
if data.include? "metadata"
|
210
|
+
self.metadata = data["metadata"]
|
211
|
+
end
|
212
|
+
if data.include? "sandbox"
|
213
|
+
self.sandbox = data["sandbox"]
|
214
|
+
end
|
215
|
+
if data.include? "created_at"
|
216
|
+
self.created_at = data["created_at"]
|
217
|
+
end
|
218
|
+
|
219
|
+
self
|
220
|
+
end
|
221
|
+
|
222
|
+
# Prefills the object with the data passed as parameters
|
223
|
+
# Params:
|
224
|
+
# +data+:: +Hash+ of data
|
225
|
+
def prefill(data)
|
226
|
+
if data.nil?
|
227
|
+
return self
|
228
|
+
end
|
229
|
+
self.id = data.fetch(:id, self.id)
|
230
|
+
self.project = data.fetch(:project, self.project)
|
231
|
+
self.project_id = data.fetch(:project_id, self.project_id)
|
232
|
+
self.subscription = data.fetch(:subscription, self.subscription)
|
233
|
+
self.subscription_id = data.fetch(:subscription_id, self.subscription_id)
|
234
|
+
self.plan = data.fetch(:plan, self.plan)
|
235
|
+
self.plan_id = data.fetch(:plan_id, self.plan_id)
|
236
|
+
self.type = data.fetch(:type, self.type)
|
237
|
+
self.name = data.fetch(:name, self.name)
|
238
|
+
self.amount = data.fetch(:amount, self.amount)
|
239
|
+
self.quantity = data.fetch(:quantity, self.quantity)
|
240
|
+
self.metadata = data.fetch(:metadata, self.metadata)
|
241
|
+
self.sandbox = data.fetch(:sandbox, self.sandbox)
|
242
|
+
self.created_at = data.fetch(:created_at, self.created_at)
|
243
|
+
|
244
|
+
self
|
245
|
+
end
|
246
|
+
|
247
|
+
# Get the addons applied to the subscription.
|
248
|
+
# Params:
|
249
|
+
# +subscription_id+:: ID of the subscription
|
250
|
+
# +options+:: +Hash+ of options
|
251
|
+
def fetch_subscription_addons(subscription_id, options = {})
|
252
|
+
self.prefill(options)
|
253
|
+
|
254
|
+
request = Request.new(@client)
|
255
|
+
path = "/subscriptions/" + CGI.escape(subscription_id) + "/addons"
|
256
|
+
data = {
|
257
|
+
|
258
|
+
}
|
259
|
+
|
260
|
+
response = Response.new(request.get(path, data, options))
|
261
|
+
return_values = Array.new
|
262
|
+
|
263
|
+
a = Array.new
|
264
|
+
body = response.body
|
265
|
+
for v in body['addons']
|
266
|
+
tmp = Addon.new(@client)
|
267
|
+
tmp.fill_with_data(v)
|
268
|
+
a.push(tmp)
|
269
|
+
end
|
270
|
+
|
271
|
+
return_values.push(a)
|
272
|
+
|
273
|
+
|
274
|
+
|
275
|
+
return_values[0]
|
276
|
+
end
|
277
|
+
|
278
|
+
# Create a new addon to the given subscription ID.
|
279
|
+
# Params:
|
280
|
+
# +options+:: +Hash+ of options
|
281
|
+
def create(options = {})
|
282
|
+
self.prefill(options)
|
283
|
+
|
284
|
+
request = Request.new(@client)
|
285
|
+
path = "/subscriptions/" + CGI.escape(@subscription_id) + "/addons"
|
286
|
+
data = {
|
287
|
+
"plan_id" => @plan_id,
|
288
|
+
"type" => @type,
|
289
|
+
"name" => @name,
|
290
|
+
"amount" => @amount,
|
291
|
+
"quantity" => @quantity,
|
292
|
+
"metadata" => @metadata,
|
293
|
+
"prorate" => options.fetch(:prorate, nil),
|
294
|
+
"proration_date" => options.fetch(:proration_date, nil),
|
295
|
+
"preview" => options.fetch(:preview, nil)
|
296
|
+
}
|
297
|
+
|
298
|
+
response = Response.new(request.post(path, data, options))
|
299
|
+
return_values = Array.new
|
300
|
+
|
301
|
+
body = response.body
|
302
|
+
body = body["addon"]
|
303
|
+
|
304
|
+
|
305
|
+
return_values.push(self.fill_with_data(body))
|
306
|
+
|
307
|
+
|
308
|
+
|
309
|
+
return_values[0]
|
310
|
+
end
|
311
|
+
|
312
|
+
# Find a subscription's addon by its ID.
|
313
|
+
# Params:
|
314
|
+
# +subscription_id+:: ID of the subscription on which the addon was applied
|
315
|
+
# +addon_id+:: ID of the addon
|
316
|
+
# +options+:: +Hash+ of options
|
317
|
+
def find(subscription_id, addon_id, options = {})
|
318
|
+
self.prefill(options)
|
319
|
+
|
320
|
+
request = Request.new(@client)
|
321
|
+
path = "/subscriptions/" + CGI.escape(subscription_id) + "/addons/" + CGI.escape(addon_id) + ""
|
322
|
+
data = {
|
323
|
+
|
324
|
+
}
|
325
|
+
|
326
|
+
response = Response.new(request.get(path, data, options))
|
327
|
+
return_values = Array.new
|
328
|
+
|
329
|
+
body = response.body
|
330
|
+
body = body["addon"]
|
331
|
+
|
332
|
+
|
333
|
+
obj = Addon.new(@client)
|
334
|
+
return_values.push(obj.fill_with_data(body))
|
335
|
+
|
336
|
+
|
337
|
+
|
338
|
+
return_values[0]
|
339
|
+
end
|
340
|
+
|
341
|
+
# Save the updated addon attributes.
|
342
|
+
# Params:
|
343
|
+
# +options+:: +Hash+ of options
|
344
|
+
def save(options = {})
|
345
|
+
self.prefill(options)
|
346
|
+
|
347
|
+
request = Request.new(@client)
|
348
|
+
path = "/subscriptions/" + CGI.escape(@subscription_id) + "/addons/" + CGI.escape(@id) + ""
|
349
|
+
data = {
|
350
|
+
"plan_id" => @plan_id,
|
351
|
+
"type" => @type,
|
352
|
+
"name" => @name,
|
353
|
+
"amount" => @amount,
|
354
|
+
"quantity" => @quantity,
|
355
|
+
"metadata" => @metadata,
|
356
|
+
"prorate" => options.fetch(:prorate, nil),
|
357
|
+
"proration_date" => options.fetch(:proration_date, nil),
|
358
|
+
"preview" => options.fetch(:preview, nil),
|
359
|
+
"increment_quantity_by" => options.fetch(:increment_quantity_by, nil)
|
360
|
+
}
|
361
|
+
|
362
|
+
response = Response.new(request.put(path, data, options))
|
363
|
+
return_values = Array.new
|
364
|
+
|
365
|
+
body = response.body
|
366
|
+
body = body["addon"]
|
367
|
+
|
368
|
+
|
369
|
+
return_values.push(self.fill_with_data(body))
|
370
|
+
|
371
|
+
|
372
|
+
|
373
|
+
return_values[0]
|
374
|
+
end
|
375
|
+
|
376
|
+
# Delete an addon applied to a subscription.
|
377
|
+
# Params:
|
378
|
+
# +options+:: +Hash+ of options
|
379
|
+
def delete(options = {})
|
380
|
+
self.prefill(options)
|
381
|
+
|
382
|
+
request = Request.new(@client)
|
383
|
+
path = "/subscriptions/" + CGI.escape(@subscription_id) + "/addons/" + CGI.escape(@id) + ""
|
384
|
+
data = {
|
385
|
+
"prorate" => options.fetch(:prorate, nil),
|
386
|
+
"proration_date" => options.fetch(:proration_date, nil),
|
387
|
+
"preview" => options.fetch(:preview, nil)
|
388
|
+
}
|
389
|
+
|
390
|
+
response = Response.new(request.delete(path, data, options))
|
391
|
+
return_values = Array.new
|
392
|
+
|
393
|
+
return_values.push(response.success)
|
394
|
+
|
395
|
+
|
396
|
+
return_values[0]
|
397
|
+
end
|
398
|
+
|
399
|
+
|
400
|
+
end
|
401
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# The content of this file was automatically generated
|
2
|
+
|
3
|
+
require "cgi"
|
4
|
+
require "json"
|
5
|
+
require "processout/networking/request"
|
6
|
+
require "processout/networking/response"
|
7
|
+
|
8
|
+
module ProcessOut
|
9
|
+
class AlternativeMerchantCertificate
|
10
|
+
|
11
|
+
attr_reader :id
|
12
|
+
|
13
|
+
|
14
|
+
def id=(val)
|
15
|
+
@id = val
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# Initializes the AlternativeMerchantCertificate object
|
20
|
+
# Params:
|
21
|
+
# +client+:: +ProcessOut+ client instance
|
22
|
+
# +data+:: data that can be used to fill the object
|
23
|
+
def initialize(client, data = {})
|
24
|
+
@client = client
|
25
|
+
|
26
|
+
self.id = data.fetch(:id, nil)
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
# Create a new AlternativeMerchantCertificate using the current client
|
31
|
+
def new(data = {})
|
32
|
+
AlternativeMerchantCertificate.new(@client, data)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Overrides the JSON marshaller to only send the fields we want
|
36
|
+
def to_json(options)
|
37
|
+
{
|
38
|
+
"id": self.id,
|
39
|
+
}.to_json
|
40
|
+
end
|
41
|
+
|
42
|
+
# Fills the object with data coming from the API
|
43
|
+
# Params:
|
44
|
+
# +data+:: +Hash+ of data coming from the API
|
45
|
+
def fill_with_data(data)
|
46
|
+
if data.nil?
|
47
|
+
return self
|
48
|
+
end
|
49
|
+
if data.include? "id"
|
50
|
+
self.id = data["id"]
|
51
|
+
end
|
52
|
+
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
# Prefills the object with the data passed as parameters
|
57
|
+
# Params:
|
58
|
+
# +data+:: +Hash+ of data
|
59
|
+
def prefill(data)
|
60
|
+
if data.nil?
|
61
|
+
return self
|
62
|
+
end
|
63
|
+
self.id = data.fetch(:id, self.id)
|
64
|
+
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
# Save new alternative apple pay certificates
|
69
|
+
# Params:
|
70
|
+
# +options+:: +Hash+ of options
|
71
|
+
def save(options = {})
|
72
|
+
self.prefill(options)
|
73
|
+
|
74
|
+
request = Request.new(@client)
|
75
|
+
path = "/projects/applepay/alternative-merchant-certificates"
|
76
|
+
data = {
|
77
|
+
|
78
|
+
}
|
79
|
+
|
80
|
+
response = Response.new(request.post(path, data, options))
|
81
|
+
return_values = Array.new
|
82
|
+
|
83
|
+
body = response.body
|
84
|
+
body = body["alternative_merchant_certificate"]
|
85
|
+
alternative_merchant_certificate = AlternativeMerchantCertificate.new(@client)
|
86
|
+
return_values.push(alternative_merchant_certificate.fill_with_data(body))
|
87
|
+
|
88
|
+
|
89
|
+
return_values[0]
|
90
|
+
end
|
91
|
+
|
92
|
+
# Delete a given alternative merchant certificate
|
93
|
+
# Params:
|
94
|
+
# +options+:: +Hash+ of options
|
95
|
+
def delete(options = {})
|
96
|
+
self.prefill(options)
|
97
|
+
|
98
|
+
request = Request.new(@client)
|
99
|
+
path = "/projects/applepay/alternative-merchant-certificates/" + CGI.escape(@id) + ""
|
100
|
+
data = {
|
101
|
+
|
102
|
+
}
|
103
|
+
|
104
|
+
response = Response.new(request.delete(path, data, options))
|
105
|
+
return_values = Array.new
|
106
|
+
|
107
|
+
return_values.push(response.success)
|
108
|
+
|
109
|
+
|
110
|
+
return_values[0]
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|