processout 0.2.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 (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +10 -0
  8. data/Rakefile +6 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/deploy.sh +25 -0
  12. data/lib/processout.rb +130 -0
  13. data/lib/processout/activity.rb +147 -0
  14. data/lib/processout/authorization_request.rb +248 -0
  15. data/lib/processout/card.rb +156 -0
  16. data/lib/processout/coupon.rb +284 -0
  17. data/lib/processout/customer.rb +418 -0
  18. data/lib/processout/customer_action.rb +50 -0
  19. data/lib/processout/discount.rb +217 -0
  20. data/lib/processout/errors/authentication_error.rb +7 -0
  21. data/lib/processout/errors/generic_error.rb +7 -0
  22. data/lib/processout/errors/internal_error.rb +7 -0
  23. data/lib/processout/errors/notfound_error.rb +7 -0
  24. data/lib/processout/errors/validation_error.rb +7 -0
  25. data/lib/processout/event.rb +176 -0
  26. data/lib/processout/gateway.rb +104 -0
  27. data/lib/processout/gateway_configuration.rb +91 -0
  28. data/lib/processout/invoice.rb +457 -0
  29. data/lib/processout/networking/request.rb +95 -0
  30. data/lib/processout/networking/response.rb +61 -0
  31. data/lib/processout/plan.rb +280 -0
  32. data/lib/processout/product.rb +313 -0
  33. data/lib/processout/project.rb +105 -0
  34. data/lib/processout/refund.rb +161 -0
  35. data/lib/processout/subscription.rb +633 -0
  36. data/lib/processout/token.rb +167 -0
  37. data/lib/processout/transaction.rb +302 -0
  38. data/lib/processout/version.rb +3 -0
  39. data/lib/processout/webhook.rb +154 -0
  40. data/processout.gemspec +26 -0
  41. metadata +125 -0
@@ -0,0 +1,105 @@
1
+ # The content of this file was automatically generated
2
+
3
+ require "cgi"
4
+ require "processout/networking/request"
5
+ require "processout/networking/response"
6
+
7
+ module ProcessOut
8
+ class Project
9
+
10
+ attr_reader :id
11
+ attr_reader :name
12
+ attr_reader :logo_url
13
+ attr_reader :email
14
+ attr_reader :created_at
15
+
16
+
17
+ def id=(val)
18
+ @id = val
19
+ end
20
+
21
+ def name=(val)
22
+ @name = val
23
+ end
24
+
25
+ def logo_url=(val)
26
+ @logo_url = val
27
+ end
28
+
29
+ def email=(val)
30
+ @email = val
31
+ end
32
+
33
+ def created_at=(val)
34
+ @created_at = val
35
+ end
36
+
37
+
38
+ # Initializes the Project object
39
+ # Params:
40
+ # +client+:: +ProcessOut+ client instance
41
+ def initialize(client)
42
+ @client = client
43
+
44
+ @id = ""
45
+ @name = ""
46
+ @logo_url = ""
47
+ @email = ""
48
+ @created_at = ""
49
+
50
+ end
51
+
52
+ # Fills the object with data coming from the API
53
+ # Params:
54
+ # +data+:: +Hash+ of data coming from the API
55
+ def fill_with_data(data)
56
+ if data.include? "id"
57
+ @id = data["id"]
58
+ end
59
+ if data.include? "name"
60
+ @name = data["name"]
61
+ end
62
+ if data.include? "logo_url"
63
+ @logo_url = data["logo_url"]
64
+ end
65
+ if data.include? "email"
66
+ @email = data["email"]
67
+ end
68
+ if data.include? "created_at"
69
+ @created_at = data["created_at"]
70
+ end
71
+
72
+ self
73
+ end
74
+
75
+ # Get all the gateway configurations of the project
76
+ # Params:
77
+ # +options+:: +Hash+ of options
78
+ def gateway_configurations(options = nil)
79
+ request = Request.new(@client)
80
+ path = "/projects/" + CGI.escape(@id) + "/gateway-configurations"
81
+ data = {
82
+
83
+ }
84
+
85
+ response = Response.new(request.get(path, data, options))
86
+ return_values = Array.new
87
+
88
+ a = Array.new
89
+ body = response.body
90
+ for v in body['gateway_configurations']
91
+ tmp = GatewayConfiguration(@client)
92
+ tmp.fill_with_data(v)
93
+ a.push(tmp)
94
+ end
95
+
96
+ return_values.push(a)
97
+
98
+
99
+
100
+ return_values[0]
101
+ end
102
+
103
+
104
+ end
105
+ end
@@ -0,0 +1,161 @@
1
+ # The content of this file was automatically generated
2
+
3
+ require "cgi"
4
+ require "processout/networking/request"
5
+ require "processout/networking/response"
6
+
7
+ module ProcessOut
8
+ class Refund
9
+
10
+ attr_reader :id
11
+ attr_reader :transaction
12
+ attr_reader :reason
13
+ attr_reader :information
14
+ attr_reader :amount
15
+ attr_reader :metadata
16
+ attr_reader :sandbox
17
+ attr_reader :created_at
18
+
19
+
20
+ def id=(val)
21
+ @id = val
22
+ end
23
+
24
+ def transaction=(val)
25
+ if val.instance_of? Transaction
26
+ @transaction = val
27
+ else
28
+ obj = Transaction.new(@client)
29
+ obj.fill_with_data(val)
30
+ @transaction = obj
31
+ end
32
+
33
+ end
34
+
35
+ def reason=(val)
36
+ @reason = val
37
+ end
38
+
39
+ def information=(val)
40
+ @information = val
41
+ end
42
+
43
+ def amount=(val)
44
+ @amount = val
45
+ end
46
+
47
+ def metadata=(val)
48
+ @metadata = val
49
+ end
50
+
51
+ def sandbox=(val)
52
+ @sandbox = val
53
+ end
54
+
55
+ def created_at=(val)
56
+ @created_at = val
57
+ end
58
+
59
+
60
+ # Initializes the Refund object
61
+ # Params:
62
+ # +client+:: +ProcessOut+ client instance
63
+ def initialize(client)
64
+ @client = client
65
+
66
+ @id = ""
67
+ @transaction = nil
68
+ @reason = ""
69
+ @information = ""
70
+ @amount = ""
71
+ @metadata = Hash.new
72
+ @sandbox = false
73
+ @created_at = ""
74
+
75
+ end
76
+
77
+ # Fills the object with data coming from the API
78
+ # Params:
79
+ # +data+:: +Hash+ of data coming from the API
80
+ def fill_with_data(data)
81
+ if data.include? "id"
82
+ @id = data["id"]
83
+ end
84
+ if data.include? "transaction"
85
+ @transaction = data["transaction"]
86
+ end
87
+ if data.include? "reason"
88
+ @reason = data["reason"]
89
+ end
90
+ if data.include? "information"
91
+ @information = data["information"]
92
+ end
93
+ if data.include? "amount"
94
+ @amount = data["amount"]
95
+ end
96
+ if data.include? "metadata"
97
+ @metadata = data["metadata"]
98
+ end
99
+ if data.include? "sandbox"
100
+ @sandbox = data["sandbox"]
101
+ end
102
+ if data.include? "created_at"
103
+ @created_at = data["created_at"]
104
+ end
105
+
106
+ self
107
+ end
108
+
109
+ # Find a transaction's refund by its ID.
110
+ # Params:
111
+ # +transaction_id+:: ID of the transaction
112
+ # +refund_id+:: ID of the refund
113
+ # +options+:: +Hash+ of options
114
+ def find(transaction_id, refund_id, options = nil)
115
+ request = Request.new(@client)
116
+ path = "/transactions/" + CGI.escape(transaction_id) + "/refunds/" + CGI.escape(refund_id) + ""
117
+ data = {
118
+
119
+ }
120
+
121
+ response = Response.new(request.get(path, data, options))
122
+ return_values = Array.new
123
+
124
+ body = response.body
125
+ body = body["refund"]
126
+
127
+
128
+ obj = Refund.new(@client)
129
+ return_values.push(obj.fill_with_data(body))
130
+
131
+
132
+
133
+ return_values[0]
134
+ end
135
+
136
+ # Apply a refund to a transaction.
137
+ # Params:
138
+ # +transaction_id+:: ID of the transaction
139
+ # +options+:: +Hash+ of options
140
+ def apply(transaction_id, options = nil)
141
+ request = Request.new(@client)
142
+ path = "/transactions/" + CGI.escape(transaction_id) + "/refunds"
143
+ data = {
144
+ "amount": @amount,
145
+ "metadata": @metadata,
146
+ "reason": @reason,
147
+ "information": @information
148
+ }
149
+
150
+ response = Response.new(request.post(path, data, options))
151
+ return_values = Array.new
152
+
153
+ return_values.push(response.success)
154
+
155
+
156
+ return_values[0]
157
+ end
158
+
159
+
160
+ end
161
+ end
@@ -0,0 +1,633 @@
1
+ # The content of this file was automatically generated
2
+
3
+ require "cgi"
4
+ require "processout/networking/request"
5
+ require "processout/networking/response"
6
+
7
+ module ProcessOut
8
+ class Subscription
9
+
10
+ attr_reader :id
11
+ attr_reader :project
12
+ attr_reader :plan
13
+ attr_reader :customer
14
+ attr_reader :token
15
+ attr_reader :url
16
+ attr_reader :name
17
+ attr_reader :amount
18
+ attr_reader :currency
19
+ attr_reader :metadata
20
+ attr_reader :interval
21
+ attr_reader :trial_end_at
22
+ attr_reader :activated
23
+ attr_reader :active
24
+ attr_reader :canceled
25
+ attr_reader :cancellation_reason
26
+ attr_reader :pending_cancellation
27
+ attr_reader :cancel_at
28
+ attr_reader :return_url
29
+ attr_reader :cancel_url
30
+ attr_reader :sandbox
31
+ attr_reader :created_at
32
+ attr_reader :activated_at
33
+ attr_reader :iterate_at
34
+
35
+
36
+ def id=(val)
37
+ @id = val
38
+ end
39
+
40
+ def project=(val)
41
+ if val.instance_of? Project
42
+ @project = val
43
+ else
44
+ obj = Project.new(@client)
45
+ obj.fill_with_data(val)
46
+ @project = obj
47
+ end
48
+
49
+ end
50
+
51
+ def plan=(val)
52
+ if val.instance_of? Plan
53
+ @plan = val
54
+ else
55
+ obj = Plan.new(@client)
56
+ obj.fill_with_data(val)
57
+ @plan = obj
58
+ end
59
+
60
+ end
61
+
62
+ def customer=(val)
63
+ if val.instance_of? Customer
64
+ @customer = val
65
+ else
66
+ obj = Customer.new(@client)
67
+ obj.fill_with_data(val)
68
+ @customer = obj
69
+ end
70
+
71
+ end
72
+
73
+ def token=(val)
74
+ if val.instance_of? Token
75
+ @token = val
76
+ else
77
+ obj = Token.new(@client)
78
+ obj.fill_with_data(val)
79
+ @token = obj
80
+ end
81
+
82
+ end
83
+
84
+ def url=(val)
85
+ @url = val
86
+ end
87
+
88
+ def name=(val)
89
+ @name = val
90
+ end
91
+
92
+ def amount=(val)
93
+ @amount = val
94
+ end
95
+
96
+ def currency=(val)
97
+ @currency = val
98
+ end
99
+
100
+ def metadata=(val)
101
+ @metadata = val
102
+ end
103
+
104
+ def interval=(val)
105
+ @interval = val
106
+ end
107
+
108
+ def trial_end_at=(val)
109
+ @trial_end_at = val
110
+ end
111
+
112
+ def activated=(val)
113
+ @activated = val
114
+ end
115
+
116
+ def active=(val)
117
+ @active = val
118
+ end
119
+
120
+ def canceled=(val)
121
+ @canceled = val
122
+ end
123
+
124
+ def cancellation_reason=(val)
125
+ @cancellation_reason = val
126
+ end
127
+
128
+ def pending_cancellation=(val)
129
+ @pending_cancellation = val
130
+ end
131
+
132
+ def cancel_at=(val)
133
+ @cancel_at = val
134
+ end
135
+
136
+ def return_url=(val)
137
+ @return_url = val
138
+ end
139
+
140
+ def cancel_url=(val)
141
+ @cancel_url = val
142
+ end
143
+
144
+ def sandbox=(val)
145
+ @sandbox = val
146
+ end
147
+
148
+ def created_at=(val)
149
+ @created_at = val
150
+ end
151
+
152
+ def activated_at=(val)
153
+ @activated_at = val
154
+ end
155
+
156
+ def iterate_at=(val)
157
+ @iterate_at = val
158
+ end
159
+
160
+
161
+ # Initializes the Subscription object
162
+ # Params:
163
+ # +client+:: +ProcessOut+ client instance
164
+ def initialize(client)
165
+ @client = client
166
+
167
+ @id = ""
168
+ @project = nil
169
+ @plan = nil
170
+ @customer = nil
171
+ @token = nil
172
+ @url = ""
173
+ @name = ""
174
+ @amount = ""
175
+ @currency = ""
176
+ @metadata = Hash.new
177
+ @interval = ""
178
+ @trial_end_at = ""
179
+ @activated = false
180
+ @active = false
181
+ @canceled = false
182
+ @cancellation_reason = ""
183
+ @pending_cancellation = false
184
+ @cancel_at = ""
185
+ @return_url = ""
186
+ @cancel_url = ""
187
+ @sandbox = false
188
+ @created_at = ""
189
+ @activated_at = ""
190
+ @iterate_at = ""
191
+
192
+ end
193
+
194
+ # Fills the object with data coming from the API
195
+ # Params:
196
+ # +data+:: +Hash+ of data coming from the API
197
+ def fill_with_data(data)
198
+ if data.include? "id"
199
+ @id = data["id"]
200
+ end
201
+ if data.include? "project"
202
+ @project = data["project"]
203
+ end
204
+ if data.include? "plan"
205
+ @plan = data["plan"]
206
+ end
207
+ if data.include? "customer"
208
+ @customer = data["customer"]
209
+ end
210
+ if data.include? "token"
211
+ @token = data["token"]
212
+ end
213
+ if data.include? "url"
214
+ @url = data["url"]
215
+ end
216
+ if data.include? "name"
217
+ @name = data["name"]
218
+ end
219
+ if data.include? "amount"
220
+ @amount = data["amount"]
221
+ end
222
+ if data.include? "currency"
223
+ @currency = data["currency"]
224
+ end
225
+ if data.include? "metadata"
226
+ @metadata = data["metadata"]
227
+ end
228
+ if data.include? "interval"
229
+ @interval = data["interval"]
230
+ end
231
+ if data.include? "trial_end_at"
232
+ @trial_end_at = data["trial_end_at"]
233
+ end
234
+ if data.include? "activated"
235
+ @activated = data["activated"]
236
+ end
237
+ if data.include? "active"
238
+ @active = data["active"]
239
+ end
240
+ if data.include? "canceled"
241
+ @canceled = data["canceled"]
242
+ end
243
+ if data.include? "cancellation_reason"
244
+ @cancellation_reason = data["cancellation_reason"]
245
+ end
246
+ if data.include? "pending_cancellation"
247
+ @pending_cancellation = data["pending_cancellation"]
248
+ end
249
+ if data.include? "cancel_at"
250
+ @cancel_at = data["cancel_at"]
251
+ end
252
+ if data.include? "return_url"
253
+ @return_url = data["return_url"]
254
+ end
255
+ if data.include? "cancel_url"
256
+ @cancel_url = data["cancel_url"]
257
+ end
258
+ if data.include? "sandbox"
259
+ @sandbox = data["sandbox"]
260
+ end
261
+ if data.include? "created_at"
262
+ @created_at = data["created_at"]
263
+ end
264
+ if data.include? "activated_at"
265
+ @activated_at = data["activated_at"]
266
+ end
267
+ if data.include? "iterate_at"
268
+ @iterate_at = data["iterate_at"]
269
+ end
270
+
271
+ self
272
+ end
273
+
274
+ # Get the customer owning the subscription.
275
+ # Params:
276
+ # +options+:: +Hash+ of options
277
+ def customer(options = nil)
278
+ request = Request.new(@client)
279
+ path = "/subscriptions/" + CGI.escape(@id) + "/customers"
280
+ data = {
281
+
282
+ }
283
+
284
+ response = Response.new(request.get(path, data, options))
285
+ return_values = Array.new
286
+
287
+ body = response.body
288
+ body = body["customer"]
289
+ customer = Customer(self._client)
290
+ return_values.push(customer.fill_with_data(body))
291
+
292
+
293
+ return_values[0]
294
+ end
295
+
296
+ # Get the discounts applied to the subscription.
297
+ # Params:
298
+ # +options+:: +Hash+ of options
299
+ def discounts(options = nil)
300
+ request = Request.new(@client)
301
+ path = "/subscriptions/" + CGI.escape(@id) + "/discounts"
302
+ data = {
303
+
304
+ }
305
+
306
+ response = Response.new(request.get(path, data, options))
307
+ return_values = Array.new
308
+
309
+ a = Array.new
310
+ body = response.body
311
+ for v in body['discounts']
312
+ tmp = Discount(@client)
313
+ tmp.fill_with_data(v)
314
+ a.push(tmp)
315
+ end
316
+
317
+ return_values.push(a)
318
+
319
+
320
+
321
+ return_values[0]
322
+ end
323
+
324
+ # Remove a discount applied to a subscription.
325
+ # Params:
326
+ # +discount_id+:: ID of the discount or coupon to be removed from the subscription
327
+ # +options+:: +Hash+ of options
328
+ def remove_discount(discount_id, options = nil)
329
+ request = Request.new(@client)
330
+ path = "/subscriptions/" + CGI.escape(@id) + "/discounts/" + CGI.escape(discount_id) + ""
331
+ data = {
332
+
333
+ }
334
+
335
+ response = Response.new(request.delete(path, data, options))
336
+ return_values = Array.new
337
+
338
+ body = response.body
339
+ body = body["discount"]
340
+
341
+
342
+ return_values.push(self.fill_with_data(body))
343
+
344
+
345
+
346
+ return_values[0]
347
+ end
348
+
349
+ # Get the subscriptions past transactions.
350
+ # Params:
351
+ # +options+:: +Hash+ of options
352
+ def transactions(options = nil)
353
+ request = Request.new(@client)
354
+ path = "/subscriptions/" + CGI.escape(@id) + "/transactions"
355
+ data = {
356
+
357
+ }
358
+
359
+ response = Response.new(request.get(path, data, options))
360
+ return_values = Array.new
361
+
362
+ a = Array.new
363
+ body = response.body
364
+ for v in body['transactions']
365
+ tmp = Transaction(@client)
366
+ tmp.fill_with_data(v)
367
+ a.push(tmp)
368
+ end
369
+
370
+ return_values.push(a)
371
+
372
+
373
+
374
+ return_values[0]
375
+ end
376
+
377
+ # Get all the subscriptions.
378
+ # Params:
379
+ # +options+:: +Hash+ of options
380
+ def all(options = nil)
381
+ request = Request.new(@client)
382
+ path = "/subscriptions"
383
+ data = {
384
+
385
+ }
386
+
387
+ response = Response.new(request.get(path, data, options))
388
+ return_values = Array.new
389
+
390
+ a = Array.new
391
+ body = response.body
392
+ for v in body['subscriptions']
393
+ tmp = Subscription(@client)
394
+ tmp.fill_with_data(v)
395
+ a.push(tmp)
396
+ end
397
+
398
+ return_values.push(a)
399
+
400
+
401
+
402
+ return_values[0]
403
+ end
404
+
405
+ # Create a new subscription for the given customer.
406
+ # Params:
407
+ # +customer_id+:: ID of the customer
408
+ # +options+:: +Hash+ of options
409
+ def create(customer_id, options = nil)
410
+ request = Request.new(@client)
411
+ path = "/subscriptions"
412
+ data = {
413
+ "cancel_at": @cancel_at,
414
+ "name": @name,
415
+ "amount": @amount,
416
+ "currency": @currency,
417
+ "metadata": @metadata,
418
+ "interval": @interval,
419
+ "trial_end_at": @trial_end_at,
420
+ "return_url": @return_url,
421
+ "cancel_url": @cancel_url,
422
+ 'customer_id': customer_id
423
+ }
424
+
425
+ response = Response.new(request.post(path, data, options))
426
+ return_values = Array.new
427
+
428
+ body = response.body
429
+ body = body["subscription"]
430
+
431
+
432
+ return_values.push(self.fill_with_data(body))
433
+
434
+
435
+
436
+ return_values[0]
437
+ end
438
+
439
+ # Create a new subscription for the customer from the given plan ID.
440
+ # Params:
441
+ # +customer_id+:: ID of the customer
442
+ # +plan_id+:: ID of the plan
443
+ # +options+:: +Hash+ of options
444
+ def create_from_plan(customer_id, plan_id, options = nil)
445
+ request = Request.new(@client)
446
+ path = "/subscriptions"
447
+ data = {
448
+ "cancel_at": @cancel_at,
449
+ "name": @name,
450
+ "amount": @amount,
451
+ "currency": @currency,
452
+ "metadata": @metadata,
453
+ "interval": @interval,
454
+ "trial_end_at": @trial_end_at,
455
+ "return_url": @return_url,
456
+ "cancel_url": @cancel_url,
457
+ 'customer_id': customer_id,
458
+ 'plan_id': plan_id
459
+ }
460
+
461
+ response = Response.new(request.post(path, data, options))
462
+ return_values = Array.new
463
+
464
+ body = response.body
465
+ body = body["subscription"]
466
+
467
+
468
+ return_values.push(self.fill_with_data(body))
469
+
470
+
471
+
472
+ return_values[0]
473
+ end
474
+
475
+ # Find a subscription by its ID.
476
+ # Params:
477
+ # +subscription_id+:: ID of the subscription
478
+ # +options+:: +Hash+ of options
479
+ def find(subscription_id, options = nil)
480
+ request = Request.new(@client)
481
+ path = "/subscriptions/" + CGI.escape(subscription_id) + ""
482
+ data = {
483
+
484
+ }
485
+
486
+ response = Response.new(request.get(path, data, options))
487
+ return_values = Array.new
488
+
489
+ body = response.body
490
+ body = body["subscription"]
491
+
492
+
493
+ obj = Subscription.new(@client)
494
+ return_values.push(obj.fill_with_data(body))
495
+
496
+
497
+
498
+ return_values[0]
499
+ end
500
+
501
+ # Update the subscription.
502
+ # Params:
503
+ # +prorate+:: Define if proration should be done when updating the plan
504
+ # +options+:: +Hash+ of options
505
+ def update(prorate, options = nil)
506
+ request = Request.new(@client)
507
+ path = "/subscriptions/" + CGI.escape(@id) + ""
508
+ data = {
509
+ "trial_end_at": @trial_end_at,
510
+ 'prorate': prorate
511
+ }
512
+
513
+ response = Response.new(request.put(path, data, options))
514
+ return_values = Array.new
515
+
516
+ body = response.body
517
+ body = body["subscription"]
518
+
519
+
520
+ return_values.push(self.fill_with_data(body))
521
+
522
+
523
+
524
+ return_values[0]
525
+ end
526
+
527
+ # Update the subscription's plan.
528
+ # Params:
529
+ # +plan_id+:: ID of the new plan to be applied on the subscription
530
+ # +prorate+:: Define if proration should be done when updating the plan
531
+ # +options+:: +Hash+ of options
532
+ def update_plan(plan_id, prorate, options = nil)
533
+ request = Request.new(@client)
534
+ path = "/subscriptions/" + CGI.escape(@id) + ""
535
+ data = {
536
+ 'plan_id': plan_id,
537
+ 'prorate': prorate
538
+ }
539
+
540
+ response = Response.new(request.put(path, data, options))
541
+ return_values = Array.new
542
+
543
+ body = response.body
544
+ body = body["subscription"]
545
+
546
+
547
+ return_values.push(self.fill_with_data(body))
548
+
549
+
550
+
551
+ return_values[0]
552
+ end
553
+
554
+ # Apply a source to the subscription to activate or update the subscription's source.
555
+ # Params:
556
+ # +source+:: Source to be applied on the subscription and used to pay future invoices. Can be a card, a token or a gateway request
557
+ # +options+:: +Hash+ of options
558
+ def apply_source(source, options = nil)
559
+ request = Request.new(@client)
560
+ path = "/subscriptions/" + CGI.escape(@id) + ""
561
+ data = {
562
+ 'source': source
563
+ }
564
+
565
+ response = Response.new(request.put(path, data, options))
566
+ return_values = Array.new
567
+
568
+ body = response.body
569
+ body = body["subscription"]
570
+
571
+
572
+ return_values.push(self.fill_with_data(body))
573
+
574
+
575
+
576
+ return_values[0]
577
+ end
578
+
579
+ # Cancel a subscription. The reason may be provided as well.
580
+ # Params:
581
+ # +cancellation_reason+:: Cancellation reason
582
+ # +options+:: +Hash+ of options
583
+ def cancel(cancellation_reason, options = nil)
584
+ request = Request.new(@client)
585
+ path = "/subscriptions/" + CGI.escape(@id) + ""
586
+ data = {
587
+ 'cancellation_reason': cancellation_reason
588
+ }
589
+
590
+ response = Response.new(request.delete(path, data, options))
591
+ return_values = Array.new
592
+
593
+ body = response.body
594
+ body = body["subscription"]
595
+
596
+
597
+ return_values.push(self.fill_with_data(body))
598
+
599
+
600
+
601
+ return_values[0]
602
+ end
603
+
604
+ # Schedule the cancellation of the subscription. The reason may be provided as well.
605
+ # Params:
606
+ # +cancel_at+:: Cancellation date, in the form of a string
607
+ # +cancellation_reason+:: Cancellation reason
608
+ # +options+:: +Hash+ of options
609
+ def cancel_at(cancel_at, cancellation_reason, options = nil)
610
+ request = Request.new(@client)
611
+ path = "/subscriptions/" + CGI.escape(@id) + ""
612
+ data = {
613
+ 'cancel_at': cancel_at,
614
+ 'cancellation_reason': cancellation_reason
615
+ }
616
+
617
+ response = Response.new(request.delete(path, data, options))
618
+ return_values = Array.new
619
+
620
+ body = response.body
621
+ body = body["subscription"]
622
+
623
+
624
+ return_values.push(self.fill_with_data(body))
625
+
626
+
627
+
628
+ return_values[0]
629
+ end
630
+
631
+
632
+ end
633
+ end