gocardless_pro 2.22.1 → 2.23.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/lib/gocardless_pro.rb +3 -0
- data/lib/gocardless_pro/client.rb +6 -1
- data/lib/gocardless_pro/resources/payout.rb +2 -0
- data/lib/gocardless_pro/resources/payout_item.rb +2 -0
- data/lib/gocardless_pro/resources/tax_rate.rb +48 -0
- data/lib/gocardless_pro/services/tax_rates_service.rb +74 -0
- data/lib/gocardless_pro/version.rb +1 -1
- data/spec/resources/payout_item_spec.rb +5 -0
- data/spec/resources/payout_spec.rb +8 -0
- data/spec/resources/tax_rate_spec.rb +198 -0
- data/spec/services/payout_items_service_spec.rb +9 -0
- data/spec/services/payouts_service_spec.rb +12 -0
- data/spec/services/tax_rates_service_spec.rb +381 -0
- metadata +13 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 380e86ab83d0876327222f7966dbae08687e51cec34c468f2f57b9064a6de49b
|
4
|
+
data.tar.gz: 92a6001ee0d724bb218d3d4ef6e245389842391b8d251e7b79afe6210432367a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6241d24b24dcf35224c87bf2c559c3a0c6f543ef4f3e2c73885e8aee1a4cccc9e8fb748d323df5768c9acd01510b0ae78cf8182d2d684a7feb119bd91ad0c5ac
|
7
|
+
data.tar.gz: 2981ece7e5ad7cef1056ed51a02dc805c5a4c3d41ec483604e2b0ae2a552ca6cd2d2da1e7a92fa1740c9ce61b55e3fecd27c9138817bcf87a8d830047acdd552
|
data/lib/gocardless_pro.rb
CHANGED
@@ -95,4 +95,7 @@ require_relative 'gocardless_pro/services/refunds_service'
|
|
95
95
|
require_relative 'gocardless_pro/resources/subscription'
|
96
96
|
require_relative 'gocardless_pro/services/subscriptions_service'
|
97
97
|
|
98
|
+
require_relative 'gocardless_pro/resources/tax_rate'
|
99
|
+
require_relative 'gocardless_pro/services/tax_rates_service'
|
100
|
+
|
98
101
|
require_relative 'gocardless_pro/client.rb'
|
@@ -98,6 +98,11 @@ module GoCardlessPro
|
|
98
98
|
@subscriptions ||= Services::SubscriptionsService.new(@api_service)
|
99
99
|
end
|
100
100
|
|
101
|
+
# Access to the service for tax_rate to make API calls
|
102
|
+
def tax_rates
|
103
|
+
@tax_rates ||= Services::TaxRatesService.new(@api_service)
|
104
|
+
end
|
105
|
+
|
101
106
|
# Get a Client configured to use HTTP Basic authentication with the GC Api
|
102
107
|
#
|
103
108
|
# @param options [Hash<Symbol,String>] configuration for creating the client
|
@@ -148,7 +153,7 @@ module GoCardlessPro
|
|
148
153
|
'User-Agent' => user_agent.to_s,
|
149
154
|
'Content-Type' => 'application/json',
|
150
155
|
'GoCardless-Client-Library' => 'gocardless-pro-ruby',
|
151
|
-
'GoCardless-Client-Version' => '2.
|
156
|
+
'GoCardless-Client-Version' => '2.23.0',
|
152
157
|
},
|
153
158
|
}
|
154
159
|
end
|
@@ -30,6 +30,7 @@ module GoCardlessPro
|
|
30
30
|
attr_reader :payout_type
|
31
31
|
attr_reader :reference
|
32
32
|
attr_reader :status
|
33
|
+
attr_reader :tax_currency
|
33
34
|
|
34
35
|
# Initialize a payout resource instance
|
35
36
|
# @param object [Hash] an object returned from the API
|
@@ -48,6 +49,7 @@ module GoCardlessPro
|
|
48
49
|
@payout_type = object['payout_type']
|
49
50
|
@reference = object['reference']
|
50
51
|
@status = object['status']
|
52
|
+
@tax_currency = object['tax_currency']
|
51
53
|
@response = response
|
52
54
|
end
|
53
55
|
|
@@ -32,6 +32,7 @@ module GoCardlessPro
|
|
32
32
|
#
|
33
33
|
class PayoutItem
|
34
34
|
attr_reader :amount
|
35
|
+
attr_reader :taxes
|
35
36
|
attr_reader :type
|
36
37
|
|
37
38
|
# Initialize a payout_item resource instance
|
@@ -41,6 +42,7 @@ module GoCardlessPro
|
|
41
42
|
|
42
43
|
@amount = object['amount']
|
43
44
|
@links = object['links']
|
45
|
+
@taxes = object['taxes']
|
44
46
|
@type = object['type']
|
45
47
|
@response = response
|
46
48
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#
|
4
|
+
# This client is automatically generated from a template and JSON schema definition.
|
5
|
+
# See https://github.com/gocardless/gocardless-pro-ruby#contributing before editing.
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'uri'
|
9
|
+
|
10
|
+
module GoCardlessPro
|
11
|
+
# A module containing classes for each of the resources in the GC Api
|
12
|
+
module Resources
|
13
|
+
# Represents an instance of a tax_rate resource returned from the API
|
14
|
+
|
15
|
+
# Tax rates from tax authority.
|
16
|
+
class TaxRate
|
17
|
+
attr_reader :end_date
|
18
|
+
attr_reader :id
|
19
|
+
attr_reader :jurisdiction
|
20
|
+
attr_reader :percentage
|
21
|
+
attr_reader :start_date
|
22
|
+
attr_reader :type
|
23
|
+
|
24
|
+
# Initialize a tax_rate resource instance
|
25
|
+
# @param object [Hash] an object returned from the API
|
26
|
+
def initialize(object, response = nil)
|
27
|
+
@object = object
|
28
|
+
|
29
|
+
@end_date = object['end_date']
|
30
|
+
@id = object['id']
|
31
|
+
@jurisdiction = object['jurisdiction']
|
32
|
+
@percentage = object['percentage']
|
33
|
+
@start_date = object['start_date']
|
34
|
+
@type = object['type']
|
35
|
+
@response = response
|
36
|
+
end
|
37
|
+
|
38
|
+
def api_response
|
39
|
+
ApiResponse.new(@response)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Provides the tax_rate resource as a hash of all its readable attributes
|
43
|
+
def to_h
|
44
|
+
@object
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative './base_service'
|
2
|
+
|
3
|
+
# encoding: utf-8
|
4
|
+
#
|
5
|
+
# This client is automatically generated from a template and JSON schema definition.
|
6
|
+
# See https://github.com/gocardless/gocardless-pro-ruby#contributing before editing.
|
7
|
+
#
|
8
|
+
|
9
|
+
module GoCardlessPro
|
10
|
+
module Services
|
11
|
+
# Service for making requests to the TaxRate endpoints
|
12
|
+
class TaxRatesService < BaseService
|
13
|
+
# Returns a [cursor-paginated](#api-usage-cursor-pagination) list of all tax
|
14
|
+
# rates.
|
15
|
+
# Example URL: /tax_rates
|
16
|
+
# @param options [Hash] parameters as a hash, under a params key.
|
17
|
+
def list(options = {})
|
18
|
+
path = '/tax_rates'
|
19
|
+
|
20
|
+
options[:retry_failures] = true
|
21
|
+
|
22
|
+
response = make_request(:get, path, options)
|
23
|
+
|
24
|
+
ListResponse.new(
|
25
|
+
response: response,
|
26
|
+
unenveloped_body: unenvelope_body(response.body),
|
27
|
+
resource_class: Resources::TaxRate
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Get a lazily enumerated list of all the items returned. This is simmilar to the `list` method but will paginate for you automatically.
|
32
|
+
#
|
33
|
+
# @param options [Hash] parameters as a hash. If the request is a GET, these will be converted to query parameters.
|
34
|
+
# Otherwise they will be the body of the request.
|
35
|
+
def all(options = {})
|
36
|
+
Paginator.new(
|
37
|
+
service: self,
|
38
|
+
options: options
|
39
|
+
).enumerator
|
40
|
+
end
|
41
|
+
|
42
|
+
# Retrieves the details of a tax rate.
|
43
|
+
# Example URL: /tax_rates/:identity
|
44
|
+
#
|
45
|
+
# @param identity # The unique identifier created by the jurisdiction, tax type and version
|
46
|
+
# @param options [Hash] parameters as a hash, under a params key.
|
47
|
+
def get(identity, options = {})
|
48
|
+
path = sub_url('/tax_rates/:identity', 'identity' => identity)
|
49
|
+
|
50
|
+
options[:retry_failures] = true
|
51
|
+
|
52
|
+
response = make_request(:get, path, options)
|
53
|
+
|
54
|
+
return if response.body.nil?
|
55
|
+
|
56
|
+
Resources::TaxRate.new(unenvelope_body(response.body), response)
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
# Unenvelope the response of the body using the service's `envelope_key`
|
62
|
+
#
|
63
|
+
# @param body [Hash]
|
64
|
+
def unenvelope_body(body)
|
65
|
+
body[envelope_key] || body['data']
|
66
|
+
end
|
67
|
+
|
68
|
+
# return the key which API responses will envelope data under
|
69
|
+
def envelope_key
|
70
|
+
'tax_rates'
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -20,6 +20,7 @@ describe GoCardlessPro::Resources::PayoutItem do
|
|
20
20
|
|
21
21
|
'amount' => 'amount-input',
|
22
22
|
'links' => 'links-input',
|
23
|
+
'taxes' => 'taxes-input',
|
23
24
|
'type' => 'type-input',
|
24
25
|
}],
|
25
26
|
meta: {
|
@@ -38,6 +39,8 @@ describe GoCardlessPro::Resources::PayoutItem do
|
|
38
39
|
|
39
40
|
expect(get_list_response.records.first.amount).to eq('amount-input')
|
40
41
|
|
42
|
+
expect(get_list_response.records.first.taxes).to eq('taxes-input')
|
43
|
+
|
41
44
|
expect(get_list_response.records.first.type).to eq('type-input')
|
42
45
|
end
|
43
46
|
|
@@ -58,6 +61,7 @@ describe GoCardlessPro::Resources::PayoutItem do
|
|
58
61
|
|
59
62
|
'amount' => 'amount-input',
|
60
63
|
'links' => 'links-input',
|
64
|
+
'taxes' => 'taxes-input',
|
61
65
|
'type' => 'type-input',
|
62
66
|
}],
|
63
67
|
meta: {
|
@@ -76,6 +80,7 @@ describe GoCardlessPro::Resources::PayoutItem do
|
|
76
80
|
|
77
81
|
'amount' => 'amount-input',
|
78
82
|
'links' => 'links-input',
|
83
|
+
'taxes' => 'taxes-input',
|
79
84
|
'type' => 'type-input',
|
80
85
|
}],
|
81
86
|
meta: {
|
@@ -30,6 +30,7 @@ describe GoCardlessPro::Resources::Payout do
|
|
30
30
|
'payout_type' => 'payout_type-input',
|
31
31
|
'reference' => 'reference-input',
|
32
32
|
'status' => 'status-input',
|
33
|
+
'tax_currency' => 'tax_currency-input',
|
33
34
|
}],
|
34
35
|
meta: {
|
35
36
|
cursors: {
|
@@ -66,6 +67,8 @@ describe GoCardlessPro::Resources::Payout do
|
|
66
67
|
expect(get_list_response.records.first.reference).to eq('reference-input')
|
67
68
|
|
68
69
|
expect(get_list_response.records.first.status).to eq('status-input')
|
70
|
+
|
71
|
+
expect(get_list_response.records.first.tax_currency).to eq('tax_currency-input')
|
69
72
|
end
|
70
73
|
|
71
74
|
it 'exposes the cursors for before and after' do
|
@@ -95,6 +98,7 @@ describe GoCardlessPro::Resources::Payout do
|
|
95
98
|
'payout_type' => 'payout_type-input',
|
96
99
|
'reference' => 'reference-input',
|
97
100
|
'status' => 'status-input',
|
101
|
+
'tax_currency' => 'tax_currency-input',
|
98
102
|
}],
|
99
103
|
meta: {
|
100
104
|
cursors: { after: 'AB345' },
|
@@ -122,6 +126,7 @@ describe GoCardlessPro::Resources::Payout do
|
|
122
126
|
'payout_type' => 'payout_type-input',
|
123
127
|
'reference' => 'reference-input',
|
124
128
|
'status' => 'status-input',
|
129
|
+
'tax_currency' => 'tax_currency-input',
|
125
130
|
}],
|
126
131
|
meta: {
|
127
132
|
limit: 2,
|
@@ -165,6 +170,7 @@ describe GoCardlessPro::Resources::Payout do
|
|
165
170
|
'payout_type' => 'payout_type-input',
|
166
171
|
'reference' => 'reference-input',
|
167
172
|
'status' => 'status-input',
|
173
|
+
'tax_currency' => 'tax_currency-input',
|
168
174
|
},
|
169
175
|
}.to_json,
|
170
176
|
headers: response_headers
|
@@ -202,6 +208,7 @@ describe GoCardlessPro::Resources::Payout do
|
|
202
208
|
'payout_type' => 'payout_type-input',
|
203
209
|
'reference' => 'reference-input',
|
204
210
|
'status' => 'status-input',
|
211
|
+
'tax_currency' => 'tax_currency-input',
|
205
212
|
},
|
206
213
|
}.to_json,
|
207
214
|
headers: response_headers
|
@@ -261,6 +268,7 @@ describe GoCardlessPro::Resources::Payout do
|
|
261
268
|
'payout_type' => 'payout_type-input',
|
262
269
|
'reference' => 'reference-input',
|
263
270
|
'status' => 'status-input',
|
271
|
+
'tax_currency' => 'tax_currency-input',
|
264
272
|
},
|
265
273
|
}.to_json,
|
266
274
|
headers: response_headers
|
@@ -0,0 +1,198 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GoCardlessPro::Resources::TaxRate do
|
4
|
+
let(:client) do
|
5
|
+
GoCardlessPro::Client.new(
|
6
|
+
access_token: 'SECRET_TOKEN'
|
7
|
+
)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:response_headers) { { 'Content-Type' => 'application/json' } }
|
11
|
+
|
12
|
+
describe '#list' do
|
13
|
+
describe 'with no filters' do
|
14
|
+
subject(:get_list_response) { client.tax_rates.list }
|
15
|
+
|
16
|
+
before do
|
17
|
+
stub_request(:get, %r{.*api.gocardless.com/tax_rates}).to_return(
|
18
|
+
body: {
|
19
|
+
'tax_rates' => [{
|
20
|
+
|
21
|
+
'end_date' => 'end_date-input',
|
22
|
+
'id' => 'id-input',
|
23
|
+
'jurisdiction' => 'jurisdiction-input',
|
24
|
+
'percentage' => 'percentage-input',
|
25
|
+
'start_date' => 'start_date-input',
|
26
|
+
'type' => 'type-input',
|
27
|
+
}],
|
28
|
+
meta: {
|
29
|
+
cursors: {
|
30
|
+
before: nil,
|
31
|
+
after: 'ABC123',
|
32
|
+
},
|
33
|
+
},
|
34
|
+
}.to_json,
|
35
|
+
headers: response_headers
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'wraps each item in the resource class' do
|
40
|
+
expect(get_list_response.records.map(&:class).uniq.first).to eq(GoCardlessPro::Resources::TaxRate)
|
41
|
+
|
42
|
+
expect(get_list_response.records.first.end_date).to eq('end_date-input')
|
43
|
+
|
44
|
+
expect(get_list_response.records.first.id).to eq('id-input')
|
45
|
+
|
46
|
+
expect(get_list_response.records.first.jurisdiction).to eq('jurisdiction-input')
|
47
|
+
|
48
|
+
expect(get_list_response.records.first.percentage).to eq('percentage-input')
|
49
|
+
|
50
|
+
expect(get_list_response.records.first.start_date).to eq('start_date-input')
|
51
|
+
|
52
|
+
expect(get_list_response.records.first.type).to eq('type-input')
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'exposes the cursors for before and after' do
|
56
|
+
expect(get_list_response.before).to eq(nil)
|
57
|
+
expect(get_list_response.after).to eq('ABC123')
|
58
|
+
end
|
59
|
+
|
60
|
+
specify { expect(get_list_response.api_response.headers).to eql('content-type' => 'application/json') }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#all' do
|
65
|
+
let!(:first_response_stub) do
|
66
|
+
stub_request(:get, %r{.*api.gocardless.com/tax_rates$}).to_return(
|
67
|
+
body: {
|
68
|
+
'tax_rates' => [{
|
69
|
+
|
70
|
+
'end_date' => 'end_date-input',
|
71
|
+
'id' => 'id-input',
|
72
|
+
'jurisdiction' => 'jurisdiction-input',
|
73
|
+
'percentage' => 'percentage-input',
|
74
|
+
'start_date' => 'start_date-input',
|
75
|
+
'type' => 'type-input',
|
76
|
+
}],
|
77
|
+
meta: {
|
78
|
+
cursors: { after: 'AB345' },
|
79
|
+
limit: 1,
|
80
|
+
},
|
81
|
+
}.to_json,
|
82
|
+
headers: response_headers
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
let!(:second_response_stub) do
|
87
|
+
stub_request(:get, %r{.*api.gocardless.com/tax_rates\?after=AB345}).to_return(
|
88
|
+
body: {
|
89
|
+
'tax_rates' => [{
|
90
|
+
|
91
|
+
'end_date' => 'end_date-input',
|
92
|
+
'id' => 'id-input',
|
93
|
+
'jurisdiction' => 'jurisdiction-input',
|
94
|
+
'percentage' => 'percentage-input',
|
95
|
+
'start_date' => 'start_date-input',
|
96
|
+
'type' => 'type-input',
|
97
|
+
}],
|
98
|
+
meta: {
|
99
|
+
limit: 2,
|
100
|
+
cursors: {},
|
101
|
+
},
|
102
|
+
}.to_json,
|
103
|
+
headers: response_headers
|
104
|
+
)
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'automatically makes the extra requests' do
|
108
|
+
expect(client.tax_rates.all.to_a.length).to eq(2)
|
109
|
+
expect(first_response_stub).to have_been_requested
|
110
|
+
expect(second_response_stub).to have_been_requested
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
describe '#get' do
|
115
|
+
let(:id) { 'ID123' }
|
116
|
+
|
117
|
+
subject(:get_response) { client.tax_rates.get(id) }
|
118
|
+
|
119
|
+
context 'passing in a custom header' do
|
120
|
+
let!(:stub) do
|
121
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
122
|
+
stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
123
|
+
with(headers: { 'Foo' => 'Bar' }).
|
124
|
+
to_return(
|
125
|
+
body: {
|
126
|
+
'tax_rates' => {
|
127
|
+
|
128
|
+
'end_date' => 'end_date-input',
|
129
|
+
'id' => 'id-input',
|
130
|
+
'jurisdiction' => 'jurisdiction-input',
|
131
|
+
'percentage' => 'percentage-input',
|
132
|
+
'start_date' => 'start_date-input',
|
133
|
+
'type' => 'type-input',
|
134
|
+
},
|
135
|
+
}.to_json,
|
136
|
+
headers: response_headers
|
137
|
+
)
|
138
|
+
end
|
139
|
+
|
140
|
+
subject(:get_response) do
|
141
|
+
client.tax_rates.get(id, headers: {
|
142
|
+
'Foo' => 'Bar',
|
143
|
+
})
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'includes the header' do
|
147
|
+
get_response
|
148
|
+
expect(stub).to have_been_requested
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'when there is a tax_rate to return' do
|
153
|
+
before do
|
154
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
155
|
+
stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
|
156
|
+
body: {
|
157
|
+
'tax_rates' => {
|
158
|
+
|
159
|
+
'end_date' => 'end_date-input',
|
160
|
+
'id' => 'id-input',
|
161
|
+
'jurisdiction' => 'jurisdiction-input',
|
162
|
+
'percentage' => 'percentage-input',
|
163
|
+
'start_date' => 'start_date-input',
|
164
|
+
'type' => 'type-input',
|
165
|
+
},
|
166
|
+
}.to_json,
|
167
|
+
headers: response_headers
|
168
|
+
)
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'wraps the response in a resource' do
|
172
|
+
expect(get_response).to be_a(GoCardlessPro::Resources::TaxRate)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
context 'when nothing is returned' do
|
177
|
+
before do
|
178
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
179
|
+
stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
|
180
|
+
body: '',
|
181
|
+
headers: response_headers
|
182
|
+
)
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'returns nil' do
|
186
|
+
expect(get_response).to be_nil
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
context "when an ID is specified which can't be included in a valid URI" do
|
191
|
+
let(:id) { '`' }
|
192
|
+
|
193
|
+
it "doesn't raise an error" do
|
194
|
+
expect { get_response }.to_not raise_error(/bad URI/)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
@@ -19,6 +19,7 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
19
19
|
|
20
20
|
'amount' => 'amount-input',
|
21
21
|
'links' => 'links-input',
|
22
|
+
'taxes' => 'taxes-input',
|
22
23
|
'type' => 'type-input',
|
23
24
|
}],
|
24
25
|
meta: {
|
@@ -42,6 +43,8 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
42
43
|
|
43
44
|
expect(get_list_response.records.first.amount).to eq('amount-input')
|
44
45
|
|
46
|
+
expect(get_list_response.records.first.taxes).to eq('taxes-input')
|
47
|
+
|
45
48
|
expect(get_list_response.records.first.type).to eq('type-input')
|
46
49
|
end
|
47
50
|
|
@@ -85,6 +88,7 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
85
88
|
|
86
89
|
'amount' => 'amount-input',
|
87
90
|
'links' => 'links-input',
|
91
|
+
'taxes' => 'taxes-input',
|
88
92
|
'type' => 'type-input',
|
89
93
|
}],
|
90
94
|
meta: {
|
@@ -103,6 +107,7 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
103
107
|
|
104
108
|
'amount' => 'amount-input',
|
105
109
|
'links' => 'links-input',
|
110
|
+
'taxes' => 'taxes-input',
|
106
111
|
'type' => 'type-input',
|
107
112
|
}],
|
108
113
|
meta: {
|
@@ -130,6 +135,7 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
130
135
|
|
131
136
|
'amount' => 'amount-input',
|
132
137
|
'links' => 'links-input',
|
138
|
+
'taxes' => 'taxes-input',
|
133
139
|
'type' => 'type-input',
|
134
140
|
}],
|
135
141
|
meta: {
|
@@ -148,6 +154,7 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
148
154
|
|
149
155
|
'amount' => 'amount-input',
|
150
156
|
'links' => 'links-input',
|
157
|
+
'taxes' => 'taxes-input',
|
151
158
|
'type' => 'type-input',
|
152
159
|
}],
|
153
160
|
meta: {
|
@@ -171,6 +178,7 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
171
178
|
|
172
179
|
'amount' => 'amount-input',
|
173
180
|
'links' => 'links-input',
|
181
|
+
'taxes' => 'taxes-input',
|
174
182
|
'type' => 'type-input',
|
175
183
|
}],
|
176
184
|
meta: {
|
@@ -192,6 +200,7 @@ describe GoCardlessPro::Services::PayoutItemsService do
|
|
192
200
|
|
193
201
|
'amount' => 'amount-input',
|
194
202
|
'links' => 'links-input',
|
203
|
+
'taxes' => 'taxes-input',
|
195
204
|
'type' => 'type-input',
|
196
205
|
}],
|
197
206
|
meta: {
|
@@ -29,6 +29,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
29
29
|
'payout_type' => 'payout_type-input',
|
30
30
|
'reference' => 'reference-input',
|
31
31
|
'status' => 'status-input',
|
32
|
+
'tax_currency' => 'tax_currency-input',
|
32
33
|
}],
|
33
34
|
meta: {
|
34
35
|
cursors: {
|
@@ -70,6 +71,8 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
70
71
|
expect(get_list_response.records.first.reference).to eq('reference-input')
|
71
72
|
|
72
73
|
expect(get_list_response.records.first.status).to eq('status-input')
|
74
|
+
|
75
|
+
expect(get_list_response.records.first.tax_currency).to eq('tax_currency-input')
|
73
76
|
end
|
74
77
|
|
75
78
|
it 'exposes the cursors for before and after' do
|
@@ -122,6 +125,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
122
125
|
'payout_type' => 'payout_type-input',
|
123
126
|
'reference' => 'reference-input',
|
124
127
|
'status' => 'status-input',
|
128
|
+
'tax_currency' => 'tax_currency-input',
|
125
129
|
}],
|
126
130
|
meta: {
|
127
131
|
cursors: { after: 'AB345' },
|
@@ -149,6 +153,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
149
153
|
'payout_type' => 'payout_type-input',
|
150
154
|
'reference' => 'reference-input',
|
151
155
|
'status' => 'status-input',
|
156
|
+
'tax_currency' => 'tax_currency-input',
|
152
157
|
}],
|
153
158
|
meta: {
|
154
159
|
limit: 2,
|
@@ -185,6 +190,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
185
190
|
'payout_type' => 'payout_type-input',
|
186
191
|
'reference' => 'reference-input',
|
187
192
|
'status' => 'status-input',
|
193
|
+
'tax_currency' => 'tax_currency-input',
|
188
194
|
}],
|
189
195
|
meta: {
|
190
196
|
cursors: { after: 'AB345' },
|
@@ -212,6 +218,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
212
218
|
'payout_type' => 'payout_type-input',
|
213
219
|
'reference' => 'reference-input',
|
214
220
|
'status' => 'status-input',
|
221
|
+
'tax_currency' => 'tax_currency-input',
|
215
222
|
}],
|
216
223
|
meta: {
|
217
224
|
limit: 2,
|
@@ -244,6 +251,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
244
251
|
'payout_type' => 'payout_type-input',
|
245
252
|
'reference' => 'reference-input',
|
246
253
|
'status' => 'status-input',
|
254
|
+
'tax_currency' => 'tax_currency-input',
|
247
255
|
}],
|
248
256
|
meta: {
|
249
257
|
cursors: { after: 'AB345' },
|
@@ -274,6 +282,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
274
282
|
'payout_type' => 'payout_type-input',
|
275
283
|
'reference' => 'reference-input',
|
276
284
|
'status' => 'status-input',
|
285
|
+
'tax_currency' => 'tax_currency-input',
|
277
286
|
}],
|
278
287
|
meta: {
|
279
288
|
limit: 2,
|
@@ -317,6 +326,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
317
326
|
'payout_type' => 'payout_type-input',
|
318
327
|
'reference' => 'reference-input',
|
319
328
|
'status' => 'status-input',
|
329
|
+
'tax_currency' => 'tax_currency-input',
|
320
330
|
},
|
321
331
|
}.to_json,
|
322
332
|
headers: response_headers
|
@@ -354,6 +364,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
354
364
|
'payout_type' => 'payout_type-input',
|
355
365
|
'reference' => 'reference-input',
|
356
366
|
'status' => 'status-input',
|
367
|
+
'tax_currency' => 'tax_currency-input',
|
357
368
|
},
|
358
369
|
}.to_json,
|
359
370
|
headers: response_headers
|
@@ -468,6 +479,7 @@ describe GoCardlessPro::Services::PayoutsService do
|
|
468
479
|
'payout_type' => 'payout_type-input',
|
469
480
|
'reference' => 'reference-input',
|
470
481
|
'status' => 'status-input',
|
482
|
+
'tax_currency' => 'tax_currency-input',
|
471
483
|
},
|
472
484
|
}.to_json,
|
473
485
|
headers: response_headers
|
@@ -0,0 +1,381 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GoCardlessPro::Services::TaxRatesService do
|
4
|
+
let(:client) do
|
5
|
+
GoCardlessPro::Client.new(
|
6
|
+
access_token: 'SECRET_TOKEN'
|
7
|
+
)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:response_headers) { { 'Content-Type' => 'application/json' } }
|
11
|
+
|
12
|
+
describe '#list' do
|
13
|
+
describe 'with no filters' do
|
14
|
+
subject(:get_list_response) { client.tax_rates.list }
|
15
|
+
|
16
|
+
let(:body) do
|
17
|
+
{
|
18
|
+
'tax_rates' => [{
|
19
|
+
|
20
|
+
'end_date' => 'end_date-input',
|
21
|
+
'id' => 'id-input',
|
22
|
+
'jurisdiction' => 'jurisdiction-input',
|
23
|
+
'percentage' => 'percentage-input',
|
24
|
+
'start_date' => 'start_date-input',
|
25
|
+
'type' => 'type-input',
|
26
|
+
}],
|
27
|
+
meta: {
|
28
|
+
cursors: {
|
29
|
+
before: nil,
|
30
|
+
after: 'ABC123',
|
31
|
+
},
|
32
|
+
},
|
33
|
+
}.to_json
|
34
|
+
end
|
35
|
+
|
36
|
+
before do
|
37
|
+
stub_request(:get, %r{.*api.gocardless.com/tax_rates}).to_return(
|
38
|
+
body: body,
|
39
|
+
headers: response_headers
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'wraps each item in the resource class' do
|
44
|
+
expect(get_list_response.records.map(&:class).uniq.first).to eq(GoCardlessPro::Resources::TaxRate)
|
45
|
+
|
46
|
+
expect(get_list_response.records.first.end_date).to eq('end_date-input')
|
47
|
+
|
48
|
+
expect(get_list_response.records.first.id).to eq('id-input')
|
49
|
+
|
50
|
+
expect(get_list_response.records.first.jurisdiction).to eq('jurisdiction-input')
|
51
|
+
|
52
|
+
expect(get_list_response.records.first.percentage).to eq('percentage-input')
|
53
|
+
|
54
|
+
expect(get_list_response.records.first.start_date).to eq('start_date-input')
|
55
|
+
|
56
|
+
expect(get_list_response.records.first.type).to eq('type-input')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'exposes the cursors for before and after' do
|
60
|
+
expect(get_list_response.before).to eq(nil)
|
61
|
+
expect(get_list_response.after).to eq('ABC123')
|
62
|
+
end
|
63
|
+
|
64
|
+
specify { expect(get_list_response.api_response.headers).to eql('content-type' => 'application/json') }
|
65
|
+
|
66
|
+
describe 'retry behaviour' do
|
67
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
68
|
+
|
69
|
+
it 'retries timeouts' do
|
70
|
+
stub = stub_request(:get, %r{.*api.gocardless.com/tax_rates}).
|
71
|
+
to_timeout.then.to_return(status: 200, headers: response_headers, body: body)
|
72
|
+
|
73
|
+
get_list_response
|
74
|
+
expect(stub).to have_been_requested.twice
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'retries 5XX errors' do
|
78
|
+
stub = stub_request(:get, %r{.*api.gocardless.com/tax_rates}).
|
79
|
+
to_return(status: 502,
|
80
|
+
headers: { 'Content-Type' => 'text/html' },
|
81
|
+
body: '<html><body>Response from Cloudflare</body></html>').
|
82
|
+
then.to_return(status: 200, headers: response_headers, body: body)
|
83
|
+
|
84
|
+
get_list_response
|
85
|
+
expect(stub).to have_been_requested.twice
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '#all' do
|
92
|
+
let!(:first_response_stub) do
|
93
|
+
stub_request(:get, %r{.*api.gocardless.com/tax_rates$}).to_return(
|
94
|
+
body: {
|
95
|
+
'tax_rates' => [{
|
96
|
+
|
97
|
+
'end_date' => 'end_date-input',
|
98
|
+
'id' => 'id-input',
|
99
|
+
'jurisdiction' => 'jurisdiction-input',
|
100
|
+
'percentage' => 'percentage-input',
|
101
|
+
'start_date' => 'start_date-input',
|
102
|
+
'type' => 'type-input',
|
103
|
+
}],
|
104
|
+
meta: {
|
105
|
+
cursors: { after: 'AB345' },
|
106
|
+
limit: 1,
|
107
|
+
},
|
108
|
+
}.to_json,
|
109
|
+
headers: response_headers
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
113
|
+
let!(:second_response_stub) do
|
114
|
+
stub_request(:get, %r{.*api.gocardless.com/tax_rates\?after=AB345}).to_return(
|
115
|
+
body: {
|
116
|
+
'tax_rates' => [{
|
117
|
+
|
118
|
+
'end_date' => 'end_date-input',
|
119
|
+
'id' => 'id-input',
|
120
|
+
'jurisdiction' => 'jurisdiction-input',
|
121
|
+
'percentage' => 'percentage-input',
|
122
|
+
'start_date' => 'start_date-input',
|
123
|
+
'type' => 'type-input',
|
124
|
+
}],
|
125
|
+
meta: {
|
126
|
+
limit: 2,
|
127
|
+
cursors: {},
|
128
|
+
},
|
129
|
+
}.to_json,
|
130
|
+
headers: response_headers
|
131
|
+
)
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'automatically makes the extra requests' do
|
135
|
+
expect(client.tax_rates.all.to_a.length).to eq(2)
|
136
|
+
expect(first_response_stub).to have_been_requested
|
137
|
+
expect(second_response_stub).to have_been_requested
|
138
|
+
end
|
139
|
+
|
140
|
+
describe 'retry behaviour' do
|
141
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
142
|
+
|
143
|
+
it 'retries timeouts' do
|
144
|
+
first_response_stub = stub_request(:get, %r{.*api.gocardless.com/tax_rates$}).to_return(
|
145
|
+
body: {
|
146
|
+
'tax_rates' => [{
|
147
|
+
|
148
|
+
'end_date' => 'end_date-input',
|
149
|
+
'id' => 'id-input',
|
150
|
+
'jurisdiction' => 'jurisdiction-input',
|
151
|
+
'percentage' => 'percentage-input',
|
152
|
+
'start_date' => 'start_date-input',
|
153
|
+
'type' => 'type-input',
|
154
|
+
}],
|
155
|
+
meta: {
|
156
|
+
cursors: { after: 'AB345' },
|
157
|
+
limit: 1,
|
158
|
+
},
|
159
|
+
}.to_json,
|
160
|
+
headers: response_headers
|
161
|
+
)
|
162
|
+
|
163
|
+
second_response_stub = stub_request(:get, %r{.*api.gocardless.com/tax_rates\?after=AB345}).
|
164
|
+
to_timeout.then.
|
165
|
+
to_return(
|
166
|
+
body: {
|
167
|
+
'tax_rates' => [{
|
168
|
+
|
169
|
+
'end_date' => 'end_date-input',
|
170
|
+
'id' => 'id-input',
|
171
|
+
'jurisdiction' => 'jurisdiction-input',
|
172
|
+
'percentage' => 'percentage-input',
|
173
|
+
'start_date' => 'start_date-input',
|
174
|
+
'type' => 'type-input',
|
175
|
+
}],
|
176
|
+
meta: {
|
177
|
+
limit: 2,
|
178
|
+
cursors: {},
|
179
|
+
},
|
180
|
+
}.to_json,
|
181
|
+
headers: response_headers
|
182
|
+
)
|
183
|
+
|
184
|
+
client.tax_rates.all.to_a
|
185
|
+
|
186
|
+
expect(first_response_stub).to have_been_requested
|
187
|
+
expect(second_response_stub).to have_been_requested.twice
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'retries 5XX errors' do
|
191
|
+
first_response_stub = stub_request(:get, %r{.*api.gocardless.com/tax_rates$}).to_return(
|
192
|
+
body: {
|
193
|
+
'tax_rates' => [{
|
194
|
+
|
195
|
+
'end_date' => 'end_date-input',
|
196
|
+
'id' => 'id-input',
|
197
|
+
'jurisdiction' => 'jurisdiction-input',
|
198
|
+
'percentage' => 'percentage-input',
|
199
|
+
'start_date' => 'start_date-input',
|
200
|
+
'type' => 'type-input',
|
201
|
+
}],
|
202
|
+
meta: {
|
203
|
+
cursors: { after: 'AB345' },
|
204
|
+
limit: 1,
|
205
|
+
},
|
206
|
+
}.to_json,
|
207
|
+
headers: response_headers
|
208
|
+
)
|
209
|
+
|
210
|
+
second_response_stub = stub_request(:get, %r{.*api.gocardless.com/tax_rates\?after=AB345}).
|
211
|
+
to_return(
|
212
|
+
status: 502,
|
213
|
+
body: '<html><body>Response from Cloudflare</body></html>',
|
214
|
+
headers: { 'Content-Type' => 'text/html' }
|
215
|
+
).then.to_return(
|
216
|
+
body: {
|
217
|
+
'tax_rates' => [{
|
218
|
+
|
219
|
+
'end_date' => 'end_date-input',
|
220
|
+
'id' => 'id-input',
|
221
|
+
'jurisdiction' => 'jurisdiction-input',
|
222
|
+
'percentage' => 'percentage-input',
|
223
|
+
'start_date' => 'start_date-input',
|
224
|
+
'type' => 'type-input',
|
225
|
+
}],
|
226
|
+
meta: {
|
227
|
+
limit: 2,
|
228
|
+
cursors: {},
|
229
|
+
},
|
230
|
+
}.to_json,
|
231
|
+
headers: response_headers
|
232
|
+
)
|
233
|
+
|
234
|
+
client.tax_rates.all.to_a
|
235
|
+
|
236
|
+
expect(first_response_stub).to have_been_requested
|
237
|
+
expect(second_response_stub).to have_been_requested.twice
|
238
|
+
end
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
describe '#get' do
|
243
|
+
let(:id) { 'ID123' }
|
244
|
+
|
245
|
+
subject(:get_response) { client.tax_rates.get(id) }
|
246
|
+
|
247
|
+
context 'passing in a custom header' do
|
248
|
+
let!(:stub) do
|
249
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
250
|
+
stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
251
|
+
with(headers: { 'Foo' => 'Bar' }).
|
252
|
+
to_return(
|
253
|
+
body: {
|
254
|
+
'tax_rates' => {
|
255
|
+
|
256
|
+
'end_date' => 'end_date-input',
|
257
|
+
'id' => 'id-input',
|
258
|
+
'jurisdiction' => 'jurisdiction-input',
|
259
|
+
'percentage' => 'percentage-input',
|
260
|
+
'start_date' => 'start_date-input',
|
261
|
+
'type' => 'type-input',
|
262
|
+
},
|
263
|
+
}.to_json,
|
264
|
+
headers: response_headers
|
265
|
+
)
|
266
|
+
end
|
267
|
+
|
268
|
+
subject(:get_response) do
|
269
|
+
client.tax_rates.get(id, headers: {
|
270
|
+
'Foo' => 'Bar',
|
271
|
+
})
|
272
|
+
end
|
273
|
+
|
274
|
+
it 'includes the header' do
|
275
|
+
get_response
|
276
|
+
expect(stub).to have_been_requested
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
context 'when there is a tax_rate to return' do
|
281
|
+
before do
|
282
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
283
|
+
stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
|
284
|
+
body: {
|
285
|
+
'tax_rates' => {
|
286
|
+
|
287
|
+
'end_date' => 'end_date-input',
|
288
|
+
'id' => 'id-input',
|
289
|
+
'jurisdiction' => 'jurisdiction-input',
|
290
|
+
'percentage' => 'percentage-input',
|
291
|
+
'start_date' => 'start_date-input',
|
292
|
+
'type' => 'type-input',
|
293
|
+
},
|
294
|
+
}.to_json,
|
295
|
+
headers: response_headers
|
296
|
+
)
|
297
|
+
end
|
298
|
+
|
299
|
+
it 'wraps the response in a resource' do
|
300
|
+
expect(get_response).to be_a(GoCardlessPro::Resources::TaxRate)
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
context 'when nothing is returned' do
|
305
|
+
before do
|
306
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
307
|
+
stub_request(:get, /.*api.gocardless.com#{stub_url}/).to_return(
|
308
|
+
body: '',
|
309
|
+
headers: response_headers
|
310
|
+
)
|
311
|
+
end
|
312
|
+
|
313
|
+
it 'returns nil' do
|
314
|
+
expect(get_response).to be_nil
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
context "when an ID is specified which can't be included in a valid URI" do
|
319
|
+
let(:id) { '`' }
|
320
|
+
|
321
|
+
it "doesn't raise an error" do
|
322
|
+
expect { get_response }.to_not raise_error(/bad URI/)
|
323
|
+
end
|
324
|
+
end
|
325
|
+
|
326
|
+
describe 'retry behaviour' do
|
327
|
+
before { allow_any_instance_of(GoCardlessPro::Request).to receive(:sleep) }
|
328
|
+
|
329
|
+
it 'retries timeouts' do
|
330
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
331
|
+
|
332
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
333
|
+
to_timeout.then.to_return(status: 200, headers: response_headers)
|
334
|
+
|
335
|
+
get_response
|
336
|
+
expect(stub).to have_been_requested.twice
|
337
|
+
end
|
338
|
+
|
339
|
+
it 'retries 5XX errors, other than 500s' do
|
340
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
341
|
+
|
342
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
343
|
+
to_return(status: 502,
|
344
|
+
headers: { 'Content-Type' => 'text/html' },
|
345
|
+
body: '<html><body>Response from Cloudflare</body></html>').
|
346
|
+
then.to_return(status: 200, headers: response_headers)
|
347
|
+
|
348
|
+
get_response
|
349
|
+
expect(stub).to have_been_requested.twice
|
350
|
+
end
|
351
|
+
|
352
|
+
it 'retries 500 errors returned by the API' do
|
353
|
+
stub_url = '/tax_rates/:identity'.gsub(':identity', id)
|
354
|
+
|
355
|
+
gocardless_error = {
|
356
|
+
'error' => {
|
357
|
+
'message' => 'Internal server error',
|
358
|
+
'documentation_url' => 'https://developer.gocardless.com/#gocardless',
|
359
|
+
'errors' => [{
|
360
|
+
'message' => 'Internal server error',
|
361
|
+
'reason' => 'internal_server_error',
|
362
|
+
}],
|
363
|
+
'type' => 'gocardless',
|
364
|
+
'code' => 500,
|
365
|
+
'request_id' => 'dummy_request_id',
|
366
|
+
'id' => 'dummy_exception_id',
|
367
|
+
},
|
368
|
+
}
|
369
|
+
|
370
|
+
stub = stub_request(:get, /.*api.gocardless.com#{stub_url}/).
|
371
|
+
to_return(status: 500,
|
372
|
+
headers: response_headers,
|
373
|
+
body: gocardless_error.to_json).
|
374
|
+
then.to_return(status: 200, headers: response_headers)
|
375
|
+
|
376
|
+
get_response
|
377
|
+
expect(stub).to have_been_requested.twice
|
378
|
+
end
|
379
|
+
end
|
380
|
+
end
|
381
|
+
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.
|
4
|
+
version: 2.23.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GoCardless
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -128,7 +128,7 @@ dependencies:
|
|
128
128
|
- - "<"
|
129
129
|
- !ruby/object:Gem::Version
|
130
130
|
version: '13'
|
131
|
-
description:
|
131
|
+
description:
|
132
132
|
email:
|
133
133
|
- engineering@gocardless.com
|
134
134
|
executables: []
|
@@ -178,6 +178,7 @@ files:
|
|
178
178
|
- lib/gocardless_pro/resources/redirect_flow.rb
|
179
179
|
- lib/gocardless_pro/resources/refund.rb
|
180
180
|
- lib/gocardless_pro/resources/subscription.rb
|
181
|
+
- lib/gocardless_pro/resources/tax_rate.rb
|
181
182
|
- lib/gocardless_pro/response.rb
|
182
183
|
- lib/gocardless_pro/services/bank_details_lookups_service.rb
|
183
184
|
- lib/gocardless_pro/services/base_service.rb
|
@@ -199,6 +200,7 @@ files:
|
|
199
200
|
- lib/gocardless_pro/services/redirect_flows_service.rb
|
200
201
|
- lib/gocardless_pro/services/refunds_service.rb
|
201
202
|
- lib/gocardless_pro/services/subscriptions_service.rb
|
203
|
+
- lib/gocardless_pro/services/tax_rates_service.rb
|
202
204
|
- lib/gocardless_pro/version.rb
|
203
205
|
- lib/gocardless_pro/webhook.rb
|
204
206
|
- spec/api_response_spec.rb
|
@@ -225,6 +227,7 @@ files:
|
|
225
227
|
- spec/resources/redirect_flow_spec.rb
|
226
228
|
- spec/resources/refund_spec.rb
|
227
229
|
- spec/resources/subscription_spec.rb
|
230
|
+
- spec/resources/tax_rate_spec.rb
|
228
231
|
- spec/response_spec.rb
|
229
232
|
- spec/services/bank_details_lookups_service_spec.rb
|
230
233
|
- spec/services/creditor_bank_accounts_service_spec.rb
|
@@ -245,13 +248,14 @@ files:
|
|
245
248
|
- spec/services/redirect_flows_service_spec.rb
|
246
249
|
- spec/services/refunds_service_spec.rb
|
247
250
|
- spec/services/subscriptions_service_spec.rb
|
251
|
+
- spec/services/tax_rates_service_spec.rb
|
248
252
|
- spec/spec_helper.rb
|
249
253
|
- spec/webhook_spec.rb
|
250
254
|
homepage: https://github.com/gocardless/gocardless-pro-ruby
|
251
255
|
licenses:
|
252
256
|
- MIT
|
253
257
|
metadata: {}
|
254
|
-
post_install_message:
|
258
|
+
post_install_message:
|
255
259
|
rdoc_options: []
|
256
260
|
require_paths:
|
257
261
|
- lib
|
@@ -266,8 +270,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
266
270
|
- !ruby/object:Gem::Version
|
267
271
|
version: '0'
|
268
272
|
requirements: []
|
269
|
-
rubygems_version: 3.
|
270
|
-
signing_key:
|
273
|
+
rubygems_version: 3.1.2
|
274
|
+
signing_key:
|
271
275
|
specification_version: 4
|
272
276
|
summary: A gem for calling the GoCardless Pro API
|
273
277
|
test_files:
|
@@ -295,6 +299,7 @@ test_files:
|
|
295
299
|
- spec/resources/redirect_flow_spec.rb
|
296
300
|
- spec/resources/refund_spec.rb
|
297
301
|
- spec/resources/subscription_spec.rb
|
302
|
+
- spec/resources/tax_rate_spec.rb
|
298
303
|
- spec/response_spec.rb
|
299
304
|
- spec/services/bank_details_lookups_service_spec.rb
|
300
305
|
- spec/services/creditor_bank_accounts_service_spec.rb
|
@@ -315,5 +320,6 @@ test_files:
|
|
315
320
|
- spec/services/redirect_flows_service_spec.rb
|
316
321
|
- spec/services/refunds_service_spec.rb
|
317
322
|
- spec/services/subscriptions_service_spec.rb
|
323
|
+
- spec/services/tax_rates_service_spec.rb
|
318
324
|
- spec/spec_helper.rb
|
319
325
|
- spec/webhook_spec.rb
|