gocardless_pro 2.18.1 → 2.19.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56e422f17e5916ab4eac449f5d12f138bac13589a481b1da75ca70e2da1ceae6
4
- data.tar.gz: 9df2ae977e5988ab8660062884644b8fdd14051d1866d940a3bd61957cd3436f
3
+ metadata.gz: a7e71f4726525b3ce899c9f4ce10cb6f957805c654f1025a5aad542c6181aa60
4
+ data.tar.gz: 9501e18394e43ab7d541712fd3130f2184d6f4caede7916abf01c24add413160
5
5
  SHA512:
6
- metadata.gz: 99e3c28948e6b35328daf3744b44ea934644ed64666f2e2887c44057e03b6fb4e66475c97b53a2ace80f41558864142dcbaee49f07f44217a8224360bd47b13f
7
- data.tar.gz: 1451294c75349cb5342388b69d2676ab61785fe6d4bf5b8b8df88c91295e30e67c209c0c24e9e997e2fb4ef808b97fa3b576f92c4509b2b8132929320cb2f9ac
6
+ metadata.gz: a8015fa41e3a0b6c5bd62810ff5f00438d880313d3a0051f756af8ba4d3c6eccd3f71c7b56452fcf9981a52a265feb692caf2deca77cf8705b094e24bb1e3a25
7
+ data.tar.gz: 972c8baa19abfbe69390010d4350788b04263c4af0665f19f35161f6b899cc32c3d5a073b36bb0596a010f9c8f34442dac56fe643e27588edfbd800ddbd6414e
@@ -148,7 +148,7 @@ module GoCardlessPro
148
148
  'User-Agent' => user_agent.to_s,
149
149
  'Content-Type' => 'application/json',
150
150
  'GoCardless-Client-Library' => 'gocardless-pro-ruby',
151
- 'GoCardless-Client-Version' => '2.18.1',
151
+ 'GoCardless-Client-Version' => '2.19.0',
152
152
  },
153
153
  }
154
154
  end
@@ -26,6 +26,7 @@ module GoCardlessPro
26
26
  attr_reader :deducted_fees
27
27
  attr_reader :fx
28
28
  attr_reader :id
29
+ attr_reader :metadata
29
30
  attr_reader :payout_type
30
31
  attr_reader :reference
31
32
  attr_reader :status
@@ -43,6 +44,7 @@ module GoCardlessPro
43
44
  @fx = object['fx']
44
45
  @id = object['id']
45
46
  @links = object['links']
47
+ @metadata = object['metadata']
46
48
  @payout_type = object['payout_type']
47
49
  @reference = object['reference']
48
50
  @status = object['status']
@@ -59,6 +59,27 @@ module GoCardlessPro
59
59
  Resources::Payout.new(unenvelope_body(response.body), response)
60
60
  end
61
61
 
62
+ # Updates a payout object. This accepts only the metadata parameter.
63
+ # Example URL: /payouts/:identity
64
+ #
65
+ # @param identity # Unique identifier, beginning with "PO".
66
+ # @param options [Hash] parameters as a hash, under a params key.
67
+ def update(identity, options = {})
68
+ path = sub_url('/payouts/:identity', 'identity' => identity)
69
+
70
+ params = options.delete(:params) || {}
71
+ options[:params] = {}
72
+ options[:params][envelope_key] = params
73
+
74
+ options[:retry_failures] = true
75
+
76
+ response = make_request(:put, path, options)
77
+
78
+ return if response.body.nil?
79
+
80
+ Resources::Payout.new(unenvelope_body(response.body), response)
81
+ end
82
+
62
83
  private
63
84
 
64
85
  # Unenvelope the response of the body using the service's `envelope_key`
@@ -141,9 +141,22 @@ module GoCardlessPro
141
141
  # Pause a subscription object.
142
142
  # No payments will be created until it is resumed.
143
143
  #
144
- # This can only be used with subscriptions created with `count` or
145
- # subscriptions without `count` and `end_date`
146
- # If the subscription has `count` its `end_date` will be `null` after pausing.
144
+ # This can only be used when a subscription collecting a fixed number of
145
+ # payments (created using `count`)
146
+ # or when they continue forever (created without `count` or `end_date`)
147
+ #
148
+ # When `pause_cycles` is omitted the subscription is paused until the [resume
149
+ # endpoint](#subscriptions-resume-a-subscription) is called.
150
+ # If the subscription is collecting a fixed number of payments, `end_date` will
151
+ # be set to `nil`.
152
+ # When paused indefinitely, `upcoming_payments` will be empty.
153
+ #
154
+ # When `pause_cycles` is provided the subscription will be paused for the number
155
+ # of cycles requested.
156
+ # If the subscription is collecting a fixed number of payments, `end_date` will
157
+ # be set to a new value.
158
+ # When paused for a number of cycles, `upcoming_payments` will still contain the
159
+ # upcoming charge dates.
147
160
  #
148
161
  # This fails with:
149
162
  #
@@ -158,6 +171,9 @@ module GoCardlessPro
158
171
  #
159
172
  # - `subscription_already_ended` if the subscription has taken all payments.
160
173
  #
174
+ # - `pause_cycles_must_be_greater_than_or_equal_to` if the provided value for
175
+ # `pause_cycles` cannot be satisfied.
176
+ #
161
177
  # Example URL: /subscriptions/:identity/actions/pause
162
178
  #
163
179
  # @param identity # Unique identifier, beginning with "SB".
@@ -199,6 +215,8 @@ module GoCardlessPro
199
215
  # Resume a subscription object.
200
216
  # Payments will start to be created again based on the subscriptions recurrence
201
217
  # rules.
218
+ # The `charge_date` on the next payment will be the same as the subscriptions
219
+ # `earliest_charge_date_after_resume`
202
220
  #
203
221
  # This fails with:
204
222
  #
@@ -211,9 +229,6 @@ module GoCardlessPro
211
229
  #
212
230
  # - `subscription_not_paused` if the subscription is not paused.
213
231
  #
214
- # - `subscription_already_scheduled_to_resume` if a subscription already has a
215
- # scheduled resume date.
216
- #
217
232
  # Example URL: /subscriptions/:identity/actions/resume
218
233
  #
219
234
  # @param identity # Unique identifier, beginning with "SB".
@@ -4,5 +4,5 @@ end
4
4
 
5
5
  module GoCardlessPro
6
6
  # Current version of the GC gem
7
- VERSION = '2.18.1'.freeze
7
+ VERSION = '2.19.0'.freeze
8
8
  end
@@ -26,6 +26,7 @@ describe GoCardlessPro::Resources::Payout do
26
26
  'fx' => 'fx-input',
27
27
  'id' => 'id-input',
28
28
  'links' => 'links-input',
29
+ 'metadata' => 'metadata-input',
29
30
  'payout_type' => 'payout_type-input',
30
31
  'reference' => 'reference-input',
31
32
  'status' => 'status-input',
@@ -58,6 +59,8 @@ describe GoCardlessPro::Resources::Payout do
58
59
 
59
60
  expect(get_list_response.records.first.id).to eq('id-input')
60
61
 
62
+ expect(get_list_response.records.first.metadata).to eq('metadata-input')
63
+
61
64
  expect(get_list_response.records.first.payout_type).to eq('payout_type-input')
62
65
 
63
66
  expect(get_list_response.records.first.reference).to eq('reference-input')
@@ -88,6 +91,7 @@ describe GoCardlessPro::Resources::Payout do
88
91
  'fx' => 'fx-input',
89
92
  'id' => 'id-input',
90
93
  'links' => 'links-input',
94
+ 'metadata' => 'metadata-input',
91
95
  'payout_type' => 'payout_type-input',
92
96
  'reference' => 'reference-input',
93
97
  'status' => 'status-input',
@@ -114,6 +118,7 @@ describe GoCardlessPro::Resources::Payout do
114
118
  'fx' => 'fx-input',
115
119
  'id' => 'id-input',
116
120
  'links' => 'links-input',
121
+ 'metadata' => 'metadata-input',
117
122
  'payout_type' => 'payout_type-input',
118
123
  'reference' => 'reference-input',
119
124
  'status' => 'status-input',
@@ -156,6 +161,7 @@ describe GoCardlessPro::Resources::Payout do
156
161
  'fx' => 'fx-input',
157
162
  'id' => 'id-input',
158
163
  'links' => 'links-input',
164
+ 'metadata' => 'metadata-input',
159
165
  'payout_type' => 'payout_type-input',
160
166
  'reference' => 'reference-input',
161
167
  'status' => 'status-input',
@@ -192,6 +198,7 @@ describe GoCardlessPro::Resources::Payout do
192
198
  'fx' => 'fx-input',
193
199
  'id' => 'id-input',
194
200
  'links' => 'links-input',
201
+ 'metadata' => 'metadata-input',
195
202
  'payout_type' => 'payout_type-input',
196
203
  'reference' => 'reference-input',
197
204
  'status' => 'status-input',
@@ -228,4 +235,42 @@ describe GoCardlessPro::Resources::Payout do
228
235
  end
229
236
  end
230
237
  end
238
+
239
+ describe '#update' do
240
+ subject(:put_update_response) { client.payouts.update(id, params: update_params) }
241
+ let(:id) { 'ABC123' }
242
+
243
+ context 'with a valid request' do
244
+ let(:update_params) { { 'hello' => 'world' } }
245
+
246
+ let!(:stub) do
247
+ stub_url = '/payouts/:identity'.gsub(':identity', id)
248
+ stub_request(:put, /.*api.gocardless.com#{stub_url}/).to_return(
249
+ body: {
250
+ 'payouts' => {
251
+
252
+ 'amount' => 'amount-input',
253
+ 'arrival_date' => 'arrival_date-input',
254
+ 'created_at' => 'created_at-input',
255
+ 'currency' => 'currency-input',
256
+ 'deducted_fees' => 'deducted_fees-input',
257
+ 'fx' => 'fx-input',
258
+ 'id' => 'id-input',
259
+ 'links' => 'links-input',
260
+ 'metadata' => 'metadata-input',
261
+ 'payout_type' => 'payout_type-input',
262
+ 'reference' => 'reference-input',
263
+ 'status' => 'status-input',
264
+ },
265
+ }.to_json,
266
+ headers: response_headers
267
+ )
268
+ end
269
+
270
+ it 'updates and returns the resource' do
271
+ expect(put_update_response).to be_a(GoCardlessPro::Resources::Payout)
272
+ expect(stub).to have_been_requested
273
+ end
274
+ end
275
+ end
231
276
  end
@@ -25,6 +25,7 @@ describe GoCardlessPro::Services::PayoutsService do
25
25
  'fx' => 'fx-input',
26
26
  'id' => 'id-input',
27
27
  'links' => 'links-input',
28
+ 'metadata' => 'metadata-input',
28
29
  'payout_type' => 'payout_type-input',
29
30
  'reference' => 'reference-input',
30
31
  'status' => 'status-input',
@@ -62,6 +63,8 @@ describe GoCardlessPro::Services::PayoutsService do
62
63
 
63
64
  expect(get_list_response.records.first.id).to eq('id-input')
64
65
 
66
+ expect(get_list_response.records.first.metadata).to eq('metadata-input')
67
+
65
68
  expect(get_list_response.records.first.payout_type).to eq('payout_type-input')
66
69
 
67
70
  expect(get_list_response.records.first.reference).to eq('reference-input')
@@ -115,6 +118,7 @@ describe GoCardlessPro::Services::PayoutsService do
115
118
  'fx' => 'fx-input',
116
119
  'id' => 'id-input',
117
120
  'links' => 'links-input',
121
+ 'metadata' => 'metadata-input',
118
122
  'payout_type' => 'payout_type-input',
119
123
  'reference' => 'reference-input',
120
124
  'status' => 'status-input',
@@ -141,6 +145,7 @@ describe GoCardlessPro::Services::PayoutsService do
141
145
  'fx' => 'fx-input',
142
146
  'id' => 'id-input',
143
147
  'links' => 'links-input',
148
+ 'metadata' => 'metadata-input',
144
149
  'payout_type' => 'payout_type-input',
145
150
  'reference' => 'reference-input',
146
151
  'status' => 'status-input',
@@ -176,6 +181,7 @@ describe GoCardlessPro::Services::PayoutsService do
176
181
  'fx' => 'fx-input',
177
182
  'id' => 'id-input',
178
183
  'links' => 'links-input',
184
+ 'metadata' => 'metadata-input',
179
185
  'payout_type' => 'payout_type-input',
180
186
  'reference' => 'reference-input',
181
187
  'status' => 'status-input',
@@ -202,6 +208,7 @@ describe GoCardlessPro::Services::PayoutsService do
202
208
  'fx' => 'fx-input',
203
209
  'id' => 'id-input',
204
210
  'links' => 'links-input',
211
+ 'metadata' => 'metadata-input',
205
212
  'payout_type' => 'payout_type-input',
206
213
  'reference' => 'reference-input',
207
214
  'status' => 'status-input',
@@ -233,6 +240,7 @@ describe GoCardlessPro::Services::PayoutsService do
233
240
  'fx' => 'fx-input',
234
241
  'id' => 'id-input',
235
242
  'links' => 'links-input',
243
+ 'metadata' => 'metadata-input',
236
244
  'payout_type' => 'payout_type-input',
237
245
  'reference' => 'reference-input',
238
246
  'status' => 'status-input',
@@ -262,6 +270,7 @@ describe GoCardlessPro::Services::PayoutsService do
262
270
  'fx' => 'fx-input',
263
271
  'id' => 'id-input',
264
272
  'links' => 'links-input',
273
+ 'metadata' => 'metadata-input',
265
274
  'payout_type' => 'payout_type-input',
266
275
  'reference' => 'reference-input',
267
276
  'status' => 'status-input',
@@ -304,6 +313,7 @@ describe GoCardlessPro::Services::PayoutsService do
304
313
  'fx' => 'fx-input',
305
314
  'id' => 'id-input',
306
315
  'links' => 'links-input',
316
+ 'metadata' => 'metadata-input',
307
317
  'payout_type' => 'payout_type-input',
308
318
  'reference' => 'reference-input',
309
319
  'status' => 'status-input',
@@ -340,6 +350,7 @@ describe GoCardlessPro::Services::PayoutsService do
340
350
  'fx' => 'fx-input',
341
351
  'id' => 'id-input',
342
352
  'links' => 'links-input',
353
+ 'metadata' => 'metadata-input',
343
354
  'payout_type' => 'payout_type-input',
344
355
  'reference' => 'reference-input',
345
356
  'status' => 'status-input',
@@ -431,4 +442,67 @@ describe GoCardlessPro::Services::PayoutsService do
431
442
  end
432
443
  end
433
444
  end
445
+
446
+ describe '#update' do
447
+ subject(:put_update_response) { client.payouts.update(id, params: update_params) }
448
+ let(:id) { 'ABC123' }
449
+
450
+ context 'with a valid request' do
451
+ let(:update_params) { { 'hello' => 'world' } }
452
+
453
+ let!(:stub) do
454
+ stub_url = '/payouts/:identity'.gsub(':identity', id)
455
+ stub_request(:put, /.*api.gocardless.com#{stub_url}/).to_return(
456
+ body: {
457
+ 'payouts' => {
458
+
459
+ 'amount' => 'amount-input',
460
+ 'arrival_date' => 'arrival_date-input',
461
+ 'created_at' => 'created_at-input',
462
+ 'currency' => 'currency-input',
463
+ 'deducted_fees' => 'deducted_fees-input',
464
+ 'fx' => 'fx-input',
465
+ 'id' => 'id-input',
466
+ 'links' => 'links-input',
467
+ 'metadata' => 'metadata-input',
468
+ 'payout_type' => 'payout_type-input',
469
+ 'reference' => 'reference-input',
470
+ 'status' => 'status-input',
471
+ },
472
+ }.to_json,
473
+ headers: response_headers
474
+ )
475
+ end
476
+
477
+ it 'updates and returns the resource' do
478
+ expect(put_update_response).to be_a(GoCardlessPro::Resources::Payout)
479
+ expect(stub).to have_been_requested
480
+ end
481
+
482
+ describe 'retry behaviour' do
483
+ before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
484
+
485
+ it 'retries timeouts' do
486
+ stub_url = '/payouts/:identity'.gsub(':identity', id)
487
+ stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/).
488
+ to_timeout.then.to_return(status: 200, headers: response_headers)
489
+
490
+ put_update_response
491
+ expect(stub).to have_been_requested.twice
492
+ end
493
+
494
+ it 'retries 5XX errors' do
495
+ stub_url = '/payouts/:identity'.gsub(':identity', id)
496
+ stub = stub_request(:put, /.*api.gocardless.com#{stub_url}/).
497
+ to_return(status: 502,
498
+ headers: { 'Content-Type' => 'text/html' },
499
+ body: '<html><body>Response from Cloudflare</body></html>').
500
+ then.to_return(status: 200, headers: response_headers)
501
+
502
+ put_update_response
503
+ expect(stub).to have_been_requested.twice
504
+ end
505
+ end
506
+ end
507
+ end
434
508
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gocardless_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.18.1
4
+ version: 2.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-03 00:00:00.000000000 Z
11
+ date: 2020-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -266,7 +266,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
266
266
  - !ruby/object:Gem::Version
267
267
  version: '0'
268
268
  requirements: []
269
- rubygems_version: 3.0.3
269
+ rubygems_version: 3.0.6
270
270
  signing_key:
271
271
  specification_version: 4
272
272
  summary: A gem for calling the GoCardless Pro API