gocardless_pro 2.9.0 → 2.10.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/README.md +11 -7
- data/lib/gocardless_pro/client.rb +1 -1
- data/lib/gocardless_pro/request.rb +9 -6
- data/lib/gocardless_pro/version.rb +1 -1
- data/spec/services/creditor_bank_accounts_service_spec.rb +29 -1
- data/spec/services/creditors_service_spec.rb +29 -1
- data/spec/services/customer_bank_accounts_service_spec.rb +29 -1
- data/spec/services/customers_service_spec.rb +29 -1
- data/spec/services/events_service_spec.rb +29 -1
- data/spec/services/mandate_imports_service_spec.rb +29 -1
- data/spec/services/mandates_service_spec.rb +29 -1
- data/spec/services/payments_service_spec.rb +29 -1
- data/spec/services/payouts_service_spec.rb +29 -1
- data/spec/services/redirect_flows_service_spec.rb +29 -1
- data/spec/services/refunds_service_spec.rb +29 -1
- data/spec/services/subscriptions_service_spec.rb +29 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06d8895916dd0f220182f39eb35a9c286f50288c84391984715f2362b142319d
|
4
|
+
data.tar.gz: d2839e1c60c82d2907980843abb9c8e1e6a911d7a157752be15cf773b8333b4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cb9c53de215e5ad3c01d83f0568e3b6fa58bd5fc50daa43de0115977cf49e0d74f9e47836d99d1c5c0b9eb51663b778c4de572c7a8190cb97650b1d6cfbfa62
|
7
|
+
data.tar.gz: e247fb19810b43ca4131471833e700734c77231f0ebb8109da023229846c63cb1a12df04d232d2430ad69ec46fc9ce6e51ed4dc7a09d9d9066467125c72a8408
|
data/README.md
CHANGED
@@ -147,18 +147,14 @@ The most common use of a custom header would be to set a custom [idempotency key
|
|
147
147
|
|
148
148
|
### Handling failures
|
149
149
|
|
150
|
-
When the API returns an error, the client will raise a corresponding
|
150
|
+
When the API itself returns an error, the client will raise a corresponding exception. There are four classes of exception which could be thrown, all of which subclass `GoCardlessPro::Error`:
|
151
151
|
|
152
152
|
- `GoCardlessPro::GoCardlessError`
|
153
153
|
- `GoCardlessPro::InvalidApiUsageError`
|
154
154
|
- `GoCardlessPro::InvalidStateError`
|
155
155
|
- `GoCardlessPro::ValidationError`
|
156
156
|
|
157
|
-
These
|
158
|
-
|
159
|
-
When the API returns an `invalid_state` error due to an `idempotent_creation_conflict`, where possible, the library will automatically retrieve the existing record which was created using the idempotency key.
|
160
|
-
|
161
|
-
All errors have the following methods to facilitate access to information in the API response:
|
157
|
+
These different types of error are fully documented in the [API documentation](https://developer.gocardless.com/api-reference/#overview-errors). Exceptions raised by the library have the following methods to provide access to information in the API response:
|
162
158
|
|
163
159
|
- `#documentation_url`
|
164
160
|
- `#message`
|
@@ -167,7 +163,15 @@ All errors have the following methods to facilitate access to information in the
|
|
167
163
|
- `#request_id`
|
168
164
|
- `#errors`
|
169
165
|
|
170
|
-
|
166
|
+
When the API returns an `invalid_state` error due to an `idempotent_creation_conflict`, where possible, the library will automatically retrieve the existing record which was created using the idempotency key.
|
167
|
+
|
168
|
+
If the client is unable to connect to GoCardless, an appropriate exception will be raised, for example:
|
169
|
+
|
170
|
+
* `Faraday::TimeoutError`, in case of a timeout
|
171
|
+
* `Faraday::ConnectionFailed`, in case of a connection issue (e.g. problems with DNS resolution)
|
172
|
+
* `GoCardlessPro::ApiError`, for `5xx` errors returned from our infrastructure, but not by the API itself
|
173
|
+
|
174
|
+
If an error occurs which is likely to be resolved with a retry (e.g. a timeout or connection error), and the request being made is idempotent, the library will automatically retry the request twice (i.e. it will make up to 3 attempts) before giving up and raising an exception.
|
171
175
|
|
172
176
|
### Using the OAuth API
|
173
177
|
|
@@ -133,7 +133,7 @@ module GoCardlessPro
|
|
133
133
|
'User-Agent' => user_agent.to_s,
|
134
134
|
'Content-Type' => 'application/json',
|
135
135
|
'GoCardless-Client-Library' => 'gocardless-pro-ruby',
|
136
|
-
'GoCardless-Client-Version' => '2.
|
136
|
+
'GoCardless-Client-Version' => '2.10.0',
|
137
137
|
},
|
138
138
|
}
|
139
139
|
end
|
@@ -3,8 +3,12 @@ require 'securerandom'
|
|
3
3
|
module GoCardlessPro
|
4
4
|
# A class that wraps an API request
|
5
5
|
class Request
|
6
|
-
|
6
|
+
MAX_RETRIES = 3
|
7
7
|
RETRY_DELAY = 0.5
|
8
|
+
RETRYABLE_EXCEPTIONS = [Faraday::TimeoutError,
|
9
|
+
Faraday::ConnectionFailed,
|
10
|
+
GoCardlessPro::ApiError,
|
11
|
+
GoCardlessPro::GoCardlessError].freeze
|
8
12
|
|
9
13
|
# Initialize a request class, which makes calls to the API
|
10
14
|
# @param connection
|
@@ -42,13 +46,14 @@ module GoCardlessPro
|
|
42
46
|
|
43
47
|
def with_retries
|
44
48
|
requests_attempted = 0
|
45
|
-
total_requests_allowed =
|
49
|
+
total_requests_allowed = MAX_RETRIES
|
46
50
|
|
47
51
|
begin
|
48
52
|
yield
|
49
53
|
rescue => exception
|
54
|
+
requests_attempted += 1
|
55
|
+
|
50
56
|
if requests_attempted < total_requests_allowed && should_retry?(exception)
|
51
|
-
requests_attempted += 1
|
52
57
|
sleep(RETRY_DELAY)
|
53
58
|
retry
|
54
59
|
else
|
@@ -90,9 +95,7 @@ module GoCardlessPro
|
|
90
95
|
private
|
91
96
|
|
92
97
|
def should_retry?(exception)
|
93
|
-
|
94
|
-
return true if exception.is_a?(Faraday::ConnectionFailed)
|
95
|
-
return true if exception.is_a?(GoCardlessPro::ApiError)
|
98
|
+
RETRYABLE_EXCEPTIONS.include?(exception.class)
|
96
99
|
end
|
97
100
|
end
|
98
101
|
end
|
@@ -563,7 +563,7 @@ describe GoCardlessPro::Services::CreditorBankAccountsService do
|
|
563
563
|
expect(stub).to have_been_requested.twice
|
564
564
|
end
|
565
565
|
|
566
|
-
it 'retries 5XX errors' do
|
566
|
+
it 'retries 5XX errors, other than 500s' do
|
567
567
|
stub_url = '/creditor_bank_accounts/:identity'.gsub(':identity', id)
|
568
568
|
|
569
569
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -575,6 +575,34 @@ describe GoCardlessPro::Services::CreditorBankAccountsService do
|
|
575
575
|
get_response
|
576
576
|
expect(stub).to have_been_requested.twice
|
577
577
|
end
|
578
|
+
|
579
|
+
it 'retries 500 errors returned by the API' do
|
580
|
+
stub_url = '/creditor_bank_accounts/:identity'.gsub(':identity', id)
|
581
|
+
|
582
|
+
gocardless_error = {
|
583
|
+
'error' => {
|
584
|
+
'message' => 'Internal server error',
|
585
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
586
|
+
'errors' => [{
|
587
|
+
'message' => 'Internal server error',
|
588
|
+
'reason' => 'internal_server_error',
|
589
|
+
}],
|
590
|
+
'type' => 'gocardless',
|
591
|
+
'code' => 500,
|
592
|
+
'request_id' => 'dummy_request_id',
|
593
|
+
'id' => 'dummy_exception_id',
|
594
|
+
},
|
595
|
+
}
|
596
|
+
|
597
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
598
|
+
to_return(status: 500,
|
599
|
+
headers: response_headers,
|
600
|
+
body: gocardless_error.to_json).
|
601
|
+
then.to_return(status: 200, headers: response_headers)
|
602
|
+
|
603
|
+
get_response
|
604
|
+
expect(stub).to have_been_requested.twice
|
605
|
+
end
|
578
606
|
end
|
579
607
|
end
|
580
608
|
|
@@ -643,7 +643,7 @@ describe GoCardlessPro::Services::CreditorsService do
|
|
643
643
|
expect(stub).to have_been_requested.twice
|
644
644
|
end
|
645
645
|
|
646
|
-
it 'retries 5XX errors' do
|
646
|
+
it 'retries 5XX errors, other than 500s' do
|
647
647
|
stub_url = '/creditors/:identity'.gsub(':identity', id)
|
648
648
|
|
649
649
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -655,6 +655,34 @@ describe GoCardlessPro::Services::CreditorsService do
|
|
655
655
|
get_response
|
656
656
|
expect(stub).to have_been_requested.twice
|
657
657
|
end
|
658
|
+
|
659
|
+
it 'retries 500 errors returned by the API' do
|
660
|
+
stub_url = '/creditors/:identity'.gsub(':identity', id)
|
661
|
+
|
662
|
+
gocardless_error = {
|
663
|
+
'error' => {
|
664
|
+
'message' => 'Internal server error',
|
665
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
666
|
+
'errors' => [{
|
667
|
+
'message' => 'Internal server error',
|
668
|
+
'reason' => 'internal_server_error',
|
669
|
+
}],
|
670
|
+
'type' => 'gocardless',
|
671
|
+
'code' => 500,
|
672
|
+
'request_id' => 'dummy_request_id',
|
673
|
+
'id' => 'dummy_exception_id',
|
674
|
+
},
|
675
|
+
}
|
676
|
+
|
677
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
678
|
+
to_return(status: 500,
|
679
|
+
headers: response_headers,
|
680
|
+
body: gocardless_error.to_json).
|
681
|
+
then.to_return(status: 200, headers: response_headers)
|
682
|
+
|
683
|
+
get_response
|
684
|
+
expect(stub).to have_been_requested.twice
|
685
|
+
end
|
658
686
|
end
|
659
687
|
end
|
660
688
|
|
@@ -563,7 +563,7 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
563
563
|
expect(stub).to have_been_requested.twice
|
564
564
|
end
|
565
565
|
|
566
|
-
it 'retries 5XX errors' do
|
566
|
+
it 'retries 5XX errors, other than 500s' do
|
567
567
|
stub_url = '/customer_bank_accounts/:identity'.gsub(':identity', id)
|
568
568
|
|
569
569
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -575,6 +575,34 @@ describe GoCardlessPro::Services::CustomerBankAccountsService do
|
|
575
575
|
get_response
|
576
576
|
expect(stub).to have_been_requested.twice
|
577
577
|
end
|
578
|
+
|
579
|
+
it 'retries 500 errors returned by the API' do
|
580
|
+
stub_url = '/customer_bank_accounts/:identity'.gsub(':identity', id)
|
581
|
+
|
582
|
+
gocardless_error = {
|
583
|
+
'error' => {
|
584
|
+
'message' => 'Internal server error',
|
585
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
586
|
+
'errors' => [{
|
587
|
+
'message' => 'Internal server error',
|
588
|
+
'reason' => 'internal_server_error',
|
589
|
+
}],
|
590
|
+
'type' => 'gocardless',
|
591
|
+
'code' => 500,
|
592
|
+
'request_id' => 'dummy_request_id',
|
593
|
+
'id' => 'dummy_exception_id',
|
594
|
+
},
|
595
|
+
}
|
596
|
+
|
597
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
598
|
+
to_return(status: 500,
|
599
|
+
headers: response_headers,
|
600
|
+
body: gocardless_error.to_json).
|
601
|
+
then.to_return(status: 200, headers: response_headers)
|
602
|
+
|
603
|
+
get_response
|
604
|
+
expect(stub).to have_been_requested.twice
|
605
|
+
end
|
578
606
|
end
|
579
607
|
end
|
580
608
|
|
@@ -677,7 +677,7 @@ describe GoCardlessPro::Services::CustomersService do
|
|
677
677
|
expect(stub).to have_been_requested.twice
|
678
678
|
end
|
679
679
|
|
680
|
-
it 'retries 5XX errors' do
|
680
|
+
it 'retries 5XX errors, other than 500s' do
|
681
681
|
stub_url = '/customers/:identity'.gsub(':identity', id)
|
682
682
|
|
683
683
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -689,6 +689,34 @@ describe GoCardlessPro::Services::CustomersService do
|
|
689
689
|
get_response
|
690
690
|
expect(stub).to have_been_requested.twice
|
691
691
|
end
|
692
|
+
|
693
|
+
it 'retries 500 errors returned by the API' do
|
694
|
+
stub_url = '/customers/:identity'.gsub(':identity', id)
|
695
|
+
|
696
|
+
gocardless_error = {
|
697
|
+
'error' => {
|
698
|
+
'message' => 'Internal server error',
|
699
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
700
|
+
'errors' => [{
|
701
|
+
'message' => 'Internal server error',
|
702
|
+
'reason' => 'internal_server_error',
|
703
|
+
}],
|
704
|
+
'type' => 'gocardless',
|
705
|
+
'code' => 500,
|
706
|
+
'request_id' => 'dummy_request_id',
|
707
|
+
'id' => 'dummy_exception_id',
|
708
|
+
},
|
709
|
+
}
|
710
|
+
|
711
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
712
|
+
to_return(status: 500,
|
713
|
+
headers: response_headers,
|
714
|
+
body: gocardless_error.to_json).
|
715
|
+
then.to_return(status: 200, headers: response_headers)
|
716
|
+
|
717
|
+
get_response
|
718
|
+
expect(stub).to have_been_requested.twice
|
719
|
+
end
|
692
720
|
end
|
693
721
|
end
|
694
722
|
|
@@ -345,7 +345,7 @@ describe GoCardlessPro::Services::EventsService do
|
|
345
345
|
expect(stub).to have_been_requested.twice
|
346
346
|
end
|
347
347
|
|
348
|
-
it 'retries 5XX errors' do
|
348
|
+
it 'retries 5XX errors, other than 500s' do
|
349
349
|
stub_url = '/events/:identity'.gsub(':identity', id)
|
350
350
|
|
351
351
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -357,6 +357,34 @@ describe GoCardlessPro::Services::EventsService do
|
|
357
357
|
get_response
|
358
358
|
expect(stub).to have_been_requested.twice
|
359
359
|
end
|
360
|
+
|
361
|
+
it 'retries 500 errors returned by the API' do
|
362
|
+
stub_url = '/events/:identity'.gsub(':identity', id)
|
363
|
+
|
364
|
+
gocardless_error = {
|
365
|
+
'error' => {
|
366
|
+
'message' => 'Internal server error',
|
367
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
368
|
+
'errors' => [{
|
369
|
+
'message' => 'Internal server error',
|
370
|
+
'reason' => 'internal_server_error',
|
371
|
+
}],
|
372
|
+
'type' => 'gocardless',
|
373
|
+
'code' => 500,
|
374
|
+
'request_id' => 'dummy_request_id',
|
375
|
+
'id' => 'dummy_exception_id',
|
376
|
+
},
|
377
|
+
}
|
378
|
+
|
379
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
380
|
+
to_return(status: 500,
|
381
|
+
headers: response_headers,
|
382
|
+
body: gocardless_error.to_json).
|
383
|
+
then.to_return(status: 200, headers: response_headers)
|
384
|
+
|
385
|
+
get_response
|
386
|
+
expect(stub).to have_been_requested.twice
|
387
|
+
end
|
360
388
|
end
|
361
389
|
end
|
362
390
|
end
|
@@ -257,7 +257,7 @@ describe GoCardlessPro::Services::MandateImportsService do
|
|
257
257
|
expect(stub).to have_been_requested.twice
|
258
258
|
end
|
259
259
|
|
260
|
-
it 'retries 5XX errors' do
|
260
|
+
it 'retries 5XX errors, other than 500s' do
|
261
261
|
stub_url = '/mandate_imports/:identity'.gsub(':identity', id)
|
262
262
|
|
263
263
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -269,6 +269,34 @@ describe GoCardlessPro::Services::MandateImportsService do
|
|
269
269
|
get_response
|
270
270
|
expect(stub).to have_been_requested.twice
|
271
271
|
end
|
272
|
+
|
273
|
+
it 'retries 500 errors returned by the API' do
|
274
|
+
stub_url = '/mandate_imports/:identity'.gsub(':identity', id)
|
275
|
+
|
276
|
+
gocardless_error = {
|
277
|
+
'error' => {
|
278
|
+
'message' => 'Internal server error',
|
279
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
280
|
+
'errors' => [{
|
281
|
+
'message' => 'Internal server error',
|
282
|
+
'reason' => 'internal_server_error',
|
283
|
+
}],
|
284
|
+
'type' => 'gocardless',
|
285
|
+
'code' => 500,
|
286
|
+
'request_id' => 'dummy_request_id',
|
287
|
+
'id' => 'dummy_exception_id',
|
288
|
+
},
|
289
|
+
}
|
290
|
+
|
291
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
292
|
+
to_return(status: 500,
|
293
|
+
headers: response_headers,
|
294
|
+
body: gocardless_error.to_json).
|
295
|
+
then.to_return(status: 200, headers: response_headers)
|
296
|
+
|
297
|
+
get_response
|
298
|
+
expect(stub).to have_been_requested.twice
|
299
|
+
end
|
272
300
|
end
|
273
301
|
end
|
274
302
|
|
@@ -547,7 +547,7 @@ describe GoCardlessPro::Services::MandatesService do
|
|
547
547
|
expect(stub).to have_been_requested.twice
|
548
548
|
end
|
549
549
|
|
550
|
-
it 'retries 5XX errors' do
|
550
|
+
it 'retries 5XX errors, other than 500s' do
|
551
551
|
stub_url = '/mandates/:identity'.gsub(':identity', id)
|
552
552
|
|
553
553
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -559,6 +559,34 @@ describe GoCardlessPro::Services::MandatesService do
|
|
559
559
|
get_response
|
560
560
|
expect(stub).to have_been_requested.twice
|
561
561
|
end
|
562
|
+
|
563
|
+
it 'retries 500 errors returned by the API' do
|
564
|
+
stub_url = '/mandates/:identity'.gsub(':identity', id)
|
565
|
+
|
566
|
+
gocardless_error = {
|
567
|
+
'error' => {
|
568
|
+
'message' => 'Internal server error',
|
569
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
570
|
+
'errors' => [{
|
571
|
+
'message' => 'Internal server error',
|
572
|
+
'reason' => 'internal_server_error',
|
573
|
+
}],
|
574
|
+
'type' => 'gocardless',
|
575
|
+
'code' => 500,
|
576
|
+
'request_id' => 'dummy_request_id',
|
577
|
+
'id' => 'dummy_exception_id',
|
578
|
+
},
|
579
|
+
}
|
580
|
+
|
581
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
582
|
+
to_return(status: 500,
|
583
|
+
headers: response_headers,
|
584
|
+
body: gocardless_error.to_json).
|
585
|
+
then.to_return(status: 200, headers: response_headers)
|
586
|
+
|
587
|
+
get_response
|
588
|
+
expect(stub).to have_been_requested.twice
|
589
|
+
end
|
562
590
|
end
|
563
591
|
end
|
564
592
|
|
@@ -579,7 +579,7 @@ describe GoCardlessPro::Services::PaymentsService do
|
|
579
579
|
expect(stub).to have_been_requested.twice
|
580
580
|
end
|
581
581
|
|
582
|
-
it 'retries 5XX errors' do
|
582
|
+
it 'retries 5XX errors, other than 500s' do
|
583
583
|
stub_url = '/payments/:identity'.gsub(':identity', id)
|
584
584
|
|
585
585
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -591,6 +591,34 @@ describe GoCardlessPro::Services::PaymentsService do
|
|
591
591
|
get_response
|
592
592
|
expect(stub).to have_been_requested.twice
|
593
593
|
end
|
594
|
+
|
595
|
+
it 'retries 500 errors returned by the API' do
|
596
|
+
stub_url = '/payments/:identity'.gsub(':identity', id)
|
597
|
+
|
598
|
+
gocardless_error = {
|
599
|
+
'error' => {
|
600
|
+
'message' => 'Internal server error',
|
601
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
602
|
+
'errors' => [{
|
603
|
+
'message' => 'Internal server error',
|
604
|
+
'reason' => 'internal_server_error',
|
605
|
+
}],
|
606
|
+
'type' => 'gocardless',
|
607
|
+
'code' => 500,
|
608
|
+
'request_id' => 'dummy_request_id',
|
609
|
+
'id' => 'dummy_exception_id',
|
610
|
+
},
|
611
|
+
}
|
612
|
+
|
613
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
614
|
+
to_return(status: 500,
|
615
|
+
headers: response_headers,
|
616
|
+
body: gocardless_error.to_json).
|
617
|
+
then.to_return(status: 200, headers: response_headers)
|
618
|
+
|
619
|
+
get_response
|
620
|
+
expect(stub).to have_been_requested.twice
|
621
|
+
end
|
594
622
|
end
|
595
623
|
end
|
596
624
|
|
@@ -378,7 +378,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
378
378
|
expect(stub).to have_been_requested.twice
|
379
379
|
end
|
380
380
|
|
381
|
-
it 'retries 5XX errors' do
|
381
|
+
it 'retries 5XX errors, other than 500s' do
|
382
382
|
stub_url = '/payouts/:identity'.gsub(':identity', id)
|
383
383
|
|
384
384
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -390,6 +390,34 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
390
390
|
get_response
|
391
391
|
expect(stub).to have_been_requested.twice
|
392
392
|
end
|
393
|
+
|
394
|
+
it 'retries 500 errors returned by the API' do
|
395
|
+
stub_url = '/payouts/:identity'.gsub(':identity', id)
|
396
|
+
|
397
|
+
gocardless_error = {
|
398
|
+
'error' => {
|
399
|
+
'message' => 'Internal server error',
|
400
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
401
|
+
'errors' => [{
|
402
|
+
'message' => 'Internal server error',
|
403
|
+
'reason' => 'internal_server_error',
|
404
|
+
}],
|
405
|
+
'type' => 'gocardless',
|
406
|
+
'code' => 500,
|
407
|
+
'request_id' => 'dummy_request_id',
|
408
|
+
'id' => 'dummy_exception_id',
|
409
|
+
},
|
410
|
+
}
|
411
|
+
|
412
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
413
|
+
to_return(status: 500,
|
414
|
+
headers: response_headers,
|
415
|
+
body: gocardless_error.to_json).
|
416
|
+
then.to_return(status: 200, headers: response_headers)
|
417
|
+
|
418
|
+
get_response
|
419
|
+
expect(stub).to have_been_requested.twice
|
420
|
+
end
|
393
421
|
end
|
394
422
|
end
|
395
423
|
end
|
@@ -292,7 +292,7 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
292
292
|
expect(stub).to have_been_requested.twice
|
293
293
|
end
|
294
294
|
|
295
|
-
it 'retries 5XX errors' do
|
295
|
+
it 'retries 5XX errors, other than 500s' do
|
296
296
|
stub_url = '/redirect_flows/:identity'.gsub(':identity', id)
|
297
297
|
|
298
298
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -304,6 +304,34 @@ describe GoCardlessPro::Services::RedirectFlowsService do
|
|
304
304
|
get_response
|
305
305
|
expect(stub).to have_been_requested.twice
|
306
306
|
end
|
307
|
+
|
308
|
+
it 'retries 500 errors returned by the API' do
|
309
|
+
stub_url = '/redirect_flows/:identity'.gsub(':identity', id)
|
310
|
+
|
311
|
+
gocardless_error = {
|
312
|
+
'error' => {
|
313
|
+
'message' => 'Internal server error',
|
314
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
315
|
+
'errors' => [{
|
316
|
+
'message' => 'Internal server error',
|
317
|
+
'reason' => 'internal_server_error',
|
318
|
+
}],
|
319
|
+
'type' => 'gocardless',
|
320
|
+
'code' => 500,
|
321
|
+
'request_id' => 'dummy_request_id',
|
322
|
+
'id' => 'dummy_exception_id',
|
323
|
+
},
|
324
|
+
}
|
325
|
+
|
326
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
327
|
+
to_return(status: 500,
|
328
|
+
headers: response_headers,
|
329
|
+
body: gocardless_error.to_json).
|
330
|
+
then.to_return(status: 200, headers: response_headers)
|
331
|
+
|
332
|
+
get_response
|
333
|
+
expect(stub).to have_been_requested.twice
|
334
|
+
end
|
307
335
|
end
|
308
336
|
end
|
309
337
|
|
@@ -515,7 +515,7 @@ describe GoCardlessPro::Services::RefundsService do
|
|
515
515
|
expect(stub).to have_been_requested.twice
|
516
516
|
end
|
517
517
|
|
518
|
-
it 'retries 5XX errors' do
|
518
|
+
it 'retries 5XX errors, other than 500s' do
|
519
519
|
stub_url = '/refunds/:identity'.gsub(':identity', id)
|
520
520
|
|
521
521
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -527,6 +527,34 @@ describe GoCardlessPro::Services::RefundsService do
|
|
527
527
|
get_response
|
528
528
|
expect(stub).to have_been_requested.twice
|
529
529
|
end
|
530
|
+
|
531
|
+
it 'retries 500 errors returned by the API' do
|
532
|
+
stub_url = '/refunds/:identity'.gsub(':identity', id)
|
533
|
+
|
534
|
+
gocardless_error = {
|
535
|
+
'error' => {
|
536
|
+
'message' => 'Internal server error',
|
537
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
538
|
+
'errors' => [{
|
539
|
+
'message' => 'Internal server error',
|
540
|
+
'reason' => 'internal_server_error',
|
541
|
+
}],
|
542
|
+
'type' => 'gocardless',
|
543
|
+
'code' => 500,
|
544
|
+
'request_id' => 'dummy_request_id',
|
545
|
+
'id' => 'dummy_exception_id',
|
546
|
+
},
|
547
|
+
}
|
548
|
+
|
549
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
550
|
+
to_return(status: 500,
|
551
|
+
headers: response_headers,
|
552
|
+
body: gocardless_error.to_json).
|
553
|
+
then.to_return(status: 200, headers: response_headers)
|
554
|
+
|
555
|
+
get_response
|
556
|
+
expect(stub).to have_been_requested.twice
|
557
|
+
end
|
530
558
|
end
|
531
559
|
end
|
532
560
|
|
@@ -675,7 +675,7 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
675
675
|
expect(stub).to have_been_requested.twice
|
676
676
|
end
|
677
677
|
|
678
|
-
it 'retries 5XX errors' do
|
678
|
+
it 'retries 5XX errors, other than 500s' do
|
679
679
|
stub_url = '/subscriptions/:identity'.gsub(':identity', id)
|
680
680
|
|
681
681
|
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
@@ -687,6 +687,34 @@ describe GoCardlessPro::Services::SubscriptionsService do
|
|
687
687
|
get_response
|
688
688
|
expect(stub).to have_been_requested.twice
|
689
689
|
end
|
690
|
+
|
691
|
+
it 'retries 500 errors returned by the API' do
|
692
|
+
stub_url = '/subscriptions/:identity'.gsub(':identity', id)
|
693
|
+
|
694
|
+
gocardless_error = {
|
695
|
+
'error' => {
|
696
|
+
'message' => 'Internal server error',
|
697
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
698
|
+
'errors' => [{
|
699
|
+
'message' => 'Internal server error',
|
700
|
+
'reason' => 'internal_server_error',
|
701
|
+
}],
|
702
|
+
'type' => 'gocardless',
|
703
|
+
'code' => 500,
|
704
|
+
'request_id' => 'dummy_request_id',
|
705
|
+
'id' => 'dummy_exception_id',
|
706
|
+
},
|
707
|
+
}
|
708
|
+
|
709
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
710
|
+
to_return(status: 500,
|
711
|
+
headers: response_headers,
|
712
|
+
body: gocardless_error.to_json).
|
713
|
+
then.to_return(status: 200, headers: response_headers)
|
714
|
+
|
715
|
+
get_response
|
716
|
+
expect(stub).to have_been_requested.twice
|
717
|
+
end
|
690
718
|
end
|
691
719
|
end
|
692
720
|
|
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.
|
4
|
+
version: 2.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GoCardless
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|