gocardless_pro 2.21.0 → 2.25.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +25 -43
  3. data/Gemfile +7 -0
  4. data/gocardless_pro.gemspec +2 -2
  5. data/lib/gocardless_pro.rb +6 -0
  6. data/lib/gocardless_pro/api_service.rb +1 -1
  7. data/lib/gocardless_pro/client.rb +11 -1
  8. data/lib/gocardless_pro/resources/event.rb +12 -0
  9. data/lib/gocardless_pro/resources/payer_authorisation.rb +119 -0
  10. data/lib/gocardless_pro/resources/payout.rb +2 -0
  11. data/lib/gocardless_pro/resources/payout_item.rb +6 -0
  12. data/lib/gocardless_pro/resources/tax_rate.rb +51 -0
  13. data/lib/gocardless_pro/services/bank_details_lookups_service.rb +0 -10
  14. data/lib/gocardless_pro/services/base_service.rb +11 -0
  15. data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +0 -10
  16. data/lib/gocardless_pro/services/creditors_service.rb +0 -10
  17. data/lib/gocardless_pro/services/currency_exchange_rates_service.rb +0 -10
  18. data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +0 -10
  19. data/lib/gocardless_pro/services/customer_notifications_service.rb +0 -10
  20. data/lib/gocardless_pro/services/customers_service.rb +0 -10
  21. data/lib/gocardless_pro/services/events_service.rb +0 -10
  22. data/lib/gocardless_pro/services/instalment_schedules_service.rb +0 -10
  23. data/lib/gocardless_pro/services/mandate_import_entries_service.rb +0 -10
  24. data/lib/gocardless_pro/services/mandate_imports_service.rb +0 -10
  25. data/lib/gocardless_pro/services/mandate_pdfs_service.rb +0 -10
  26. data/lib/gocardless_pro/services/mandates_service.rb +0 -10
  27. data/lib/gocardless_pro/services/payer_authorisations_service.rb +208 -0
  28. data/lib/gocardless_pro/services/payments_service.rb +0 -10
  29. data/lib/gocardless_pro/services/payout_items_service.rb +0 -10
  30. data/lib/gocardless_pro/services/payouts_service.rb +0 -10
  31. data/lib/gocardless_pro/services/redirect_flows_service.rb +0 -10
  32. data/lib/gocardless_pro/services/refunds_service.rb +6 -11
  33. data/lib/gocardless_pro/services/subscriptions_service.rb +1 -11
  34. data/lib/gocardless_pro/services/tax_rates_service.rb +74 -0
  35. data/lib/gocardless_pro/version.rb +1 -1
  36. data/spec/resources/payer_authorisation_spec.rb +418 -0
  37. data/spec/resources/payout_item_spec.rb +5 -0
  38. data/spec/resources/payout_spec.rb +8 -0
  39. data/spec/resources/tax_rate_spec.rb +198 -0
  40. data/spec/services/creditor_bank_accounts_service_spec.rb +1 -1
  41. data/spec/services/customer_bank_accounts_service_spec.rb +1 -1
  42. data/spec/services/customer_notifications_service_spec.rb +1 -1
  43. data/spec/services/customers_service_spec.rb +1 -1
  44. data/spec/services/instalment_schedules_service_spec.rb +1 -1
  45. data/spec/services/mandate_imports_service_spec.rb +2 -2
  46. data/spec/services/mandates_service_spec.rb +2 -2
  47. data/spec/services/payer_authorisations_service_spec.rb +572 -0
  48. data/spec/services/payments_service_spec.rb +2 -2
  49. data/spec/services/payout_items_service_spec.rb +9 -0
  50. data/spec/services/payouts_service_spec.rb +12 -0
  51. data/spec/services/redirect_flows_service_spec.rb +1 -1
  52. data/spec/services/subscriptions_service_spec.rb +3 -3
  53. data/spec/services/tax_rates_service_spec.rb +381 -0
  54. metadata +19 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c285e5a1284e099a2840ea4dfb7a8282a73a38aa0def7e81f522654b4be5922
4
- data.tar.gz: 0443f073f12c0c6d69029a4a79d28634978274e73b6d1bc0a1517066c44b66e8
3
+ metadata.gz: 1e1d21b1955fd8db168185745bd1afbd46fd7c3fa434006abf5c0e838cd7507e
4
+ data.tar.gz: ef057338fc37aa2e791ef3dcd7536a50ff55711e7d8fa5762a51d6797395cab6
5
5
  SHA512:
6
- metadata.gz: bf2401b3823b41bd1d562a80f0e7a8b0847a86f04e1ec29ad2e55b3caf814e39ea379f0686c6108b91de81701b8cebc697e0bd1f7cd4741c44176785c01bcc27
7
- data.tar.gz: f8aa9bd7ff1c8f969d54ae654b324395572459ec065e603601dbe5eb9a38ec61852724820dc8423bc7407e47004434dcee4b880b3a4d2678086b0f0729dece07
6
+ metadata.gz: 7c1daafd49f92798ff81c407809ecf888429f2c723801c42b49dfe4d7d7351ae818925c46d897784f798c7d4ee2c7089959594cec38ab0fc6df3472f481d0207
7
+ data.tar.gz: 78eb4cd3154aa14fe50e445cd94605fe39f91893564650948717e84356fb7d374357ecbfad08784be2c21221fc096530e85407c8a1a3eb794b2ab5d40d0024d1
@@ -1,50 +1,32 @@
1
- version: 2
2
- references:
3
- test_library: &test_library
1
+ version: 2.1
2
+
3
+ jobs:
4
+ test: &test
4
5
  parallelism: 1
6
+ parameters:
7
+ faraday-version: { type: string }
8
+ ruby-version: { type: string }
9
+ docker:
10
+ - image: ruby:<<parameters.ruby-version>>
11
+ environment:
12
+ - FARADAY_VERSION=<<parameters.faraday-version>>
5
13
  steps:
6
14
  - checkout
7
- - run: |
8
- bundle install
9
- bundle exec rspec
10
- jobs:
11
- test_ruby_2_5:
12
- <<: *test_library
13
- docker:
14
- - image: ruby:2.5
15
-
16
- test_ruby_2_4:
17
- <<: *test_library
18
- docker:
19
- - image: ruby:2.4
20
-
21
- test_ruby_2_3:
22
- <<: *test_library
23
- docker:
24
- - image: ruby:2.3
25
-
26
- test_ruby_2_2:
27
- <<: *test_library
28
- docker:
29
- - image: ruby:2.2
30
-
31
- test_ruby_2_1:
32
- <<: *test_library
33
- docker:
34
- - image: ruby:2.1
35
-
36
- test_ruby_2_0:
37
- <<: *test_library
38
- docker:
39
- - image: ruby:2.0
15
+ - run: bundle install && bundle exec rspec
40
16
 
41
17
  workflows:
42
18
  version: 2
43
- build:
19
+ tests:
44
20
  jobs:
45
- - test_ruby_2_5
46
- - test_ruby_2_4
47
- - test_ruby_2_3
48
- - test_ruby_2_2
49
- - test_ruby_2_1
50
- - test_ruby_2_0
21
+ - test:
22
+ matrix:
23
+ parameters:
24
+ faraday-version: ["0.9.2", "1.0"]
25
+ ruby-version: ["2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6", "2.7"]
26
+ exclude:
27
+ - faraday-version: "1.0"
28
+ ruby-version: "2.0"
29
+ - faraday-version: "1.0"
30
+ ruby-version: "2.1"
31
+ - faraday-version: "1.0"
32
+ ruby-version: "2.2"
data/Gemfile CHANGED
@@ -1,2 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
+
4
+ # We support both pre-1.x and post-1.x Faraday versions, but to ensure compatibility we
5
+ # pin this gem against each in separate runs of CI, using the FARADAY_VERSION env var. For
6
+ # more details on the values, see .circleci/config.yml.
7
+ if ENV.key?("FARADAY_VERSION")
8
+ gem 'faraday', "~> #{ENV["FARADAY_VERSION"]}"
9
+ end
@@ -17,10 +17,10 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.add_dependency 'faraday', ['>= 0.9.2', '< 1.0']
20
+ spec.add_dependency 'faraday', ['>= 0.9.2', '< 2']
21
21
 
22
22
  spec.add_development_dependency 'rspec', '~> 3.7.0'
23
- spec.add_development_dependency 'webmock', '~> 1.18'
23
+ spec.add_development_dependency 'webmock', '~> 3.8.3'
24
24
  spec.add_development_dependency 'rubocop', '~> 0.49.1'
25
25
  spec.add_development_dependency 'yard', '~> 0.9.11'
26
26
 
@@ -77,6 +77,9 @@ require_relative 'gocardless_pro/services/mandate_import_entries_service'
77
77
  require_relative 'gocardless_pro/resources/mandate_pdf'
78
78
  require_relative 'gocardless_pro/services/mandate_pdfs_service'
79
79
 
80
+ require_relative 'gocardless_pro/resources/payer_authorisation'
81
+ require_relative 'gocardless_pro/services/payer_authorisations_service'
82
+
80
83
  require_relative 'gocardless_pro/resources/payment'
81
84
  require_relative 'gocardless_pro/services/payments_service'
82
85
 
@@ -95,4 +98,7 @@ require_relative 'gocardless_pro/services/refunds_service'
95
98
  require_relative 'gocardless_pro/resources/subscription'
96
99
  require_relative 'gocardless_pro/services/subscriptions_service'
97
100
 
101
+ require_relative 'gocardless_pro/resources/tax_rate'
102
+ require_relative 'gocardless_pro/services/tax_rates_service'
103
+
98
104
  require_relative 'gocardless_pro/client.rb'
@@ -23,7 +23,7 @@ module GoCardlessPro
23
23
  @url = url
24
24
  root_url, @path_prefix = unpack_url(url)
25
25
  http_adapter = options[:http_adapter] || [:net_http]
26
- connection_options = options[:connection_options]
26
+ connection_options = options.fetch(:connection_options, {})
27
27
 
28
28
  @connection = Faraday.new(root_url, connection_options) do |faraday|
29
29
  faraday.response :raise_gocardless_errors
@@ -68,6 +68,11 @@ module GoCardlessPro
68
68
  @mandate_pdfs ||= Services::MandatePdfsService.new(@api_service)
69
69
  end
70
70
 
71
+ # Access to the service for payer_authorisation to make API calls
72
+ def payer_authorisations
73
+ @payer_authorisations ||= Services::PayerAuthorisationsService.new(@api_service)
74
+ end
75
+
71
76
  # Access to the service for payment to make API calls
72
77
  def payments
73
78
  @payments ||= Services::PaymentsService.new(@api_service)
@@ -98,6 +103,11 @@ module GoCardlessPro
98
103
  @subscriptions ||= Services::SubscriptionsService.new(@api_service)
99
104
  end
100
105
 
106
+ # Access to the service for tax_rate to make API calls
107
+ def tax_rates
108
+ @tax_rates ||= Services::TaxRatesService.new(@api_service)
109
+ end
110
+
101
111
  # Get a Client configured to use HTTP Basic authentication with the GC Api
102
112
  #
103
113
  # @param options [Hash<Symbol,String>] configuration for creating the client
@@ -148,7 +158,7 @@ module GoCardlessPro
148
158
  'User-Agent' => user_agent.to_s,
149
159
  'Content-Type' => 'application/json',
150
160
  'GoCardless-Client-Library' => 'gocardless-pro-ruby',
151
- 'GoCardless-Client-Version' => '2.21.0',
161
+ 'GoCardless-Client-Version' => '2.25.0',
152
162
  },
153
163
  }
154
164
  end
@@ -64,6 +64,14 @@ module GoCardlessPro
64
64
  @links['creditor']
65
65
  end
66
66
 
67
+ def customer
68
+ @links['customer']
69
+ end
70
+
71
+ def customer_bank_account
72
+ @links['customer_bank_account']
73
+ end
74
+
67
75
  def instalment_schedule
68
76
  @links['instalment_schedule']
69
77
  end
@@ -88,6 +96,10 @@ module GoCardlessPro
88
96
  @links['parent_event']
89
97
  end
90
98
 
99
+ def payer_authorisation
100
+ @links['payer_authorisation']
101
+ end
102
+
91
103
  def payment
92
104
  @links['payment']
93
105
  end
@@ -0,0 +1,119 @@
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 payer_authorisation resource returned from the API
14
+
15
+ # Payer Authorisation resource acts as a wrapper for creating customer, bank
16
+ # account and mandate details in a single request.
17
+ # PayerAuthorisation API enables the integrators to build their own custom
18
+ # payment pages.
19
+ #
20
+ # The process to use the Payer Authorisation API is as follows:
21
+ #
22
+ # 1. Create a Payer Authorisation, either empty or with already available
23
+ # information
24
+ # 2. Update the authorisation with additional information or fix any
25
+ # mistakes
26
+ # 3. Submit the authorisation, after the payer has reviewed their
27
+ # information
28
+ # 4. [coming soon] Redirect the payer to the verification mechanisms from
29
+ # the response of the Submit request (this will be introduced as a
30
+ # non-breaking change)
31
+ # 5. Confirm the authorisation to indicate that the resources can be
32
+ # created
33
+ #
34
+ # After the Payer Authorisation is confirmed, resources will eventually be
35
+ # created as it's an asynchronous process.
36
+ #
37
+ # To retrieve the status and ID of the linked resources you can do one of
38
+ # the following:
39
+ # <ol>
40
+ # <li> Listen to <code> payer_authorisation_completed </code> <a
41
+ # href="#appendix-webhooks"> webhook</a> (recommended)</li>
42
+ # <li> Poll the GET <a
43
+ # href="#payer-authorisations-get-a-single-payer-authorisation">
44
+ # endpoint</a></li>
45
+ # <li> Poll the GET events API
46
+ # <code>https://api.gocardless.com/events?payer_authorisation={id}&action=completed</code>
47
+ # </li>
48
+ # </ol>
49
+ #
50
+ # <p class="notice">
51
+ # Note that the `create` and `update` endpoints behave differently than
52
+ # other existing `create` and `update` endpoints. The Payer Authorisation
53
+ # is still saved if incomplete data is provided.
54
+ # We return the list of incomplete data in the `incomplete_fields` along
55
+ # with the resources in the body of the response.
56
+ # <br><br>
57
+ # The API is designed to be flexible and allows you to collect information
58
+ # in multiple steps without storing any sensitive data in the browser or in
59
+ # your servers.
60
+ # </p>
61
+ class PayerAuthorisation
62
+ attr_reader :bank_account
63
+ attr_reader :created_at
64
+ attr_reader :customer
65
+ attr_reader :id
66
+ attr_reader :incomplete_fields
67
+ attr_reader :mandate
68
+ attr_reader :status
69
+
70
+ # Initialize a payer_authorisation resource instance
71
+ # @param object [Hash] an object returned from the API
72
+ def initialize(object, response = nil)
73
+ @object = object
74
+
75
+ @bank_account = object['bank_account']
76
+ @created_at = object['created_at']
77
+ @customer = object['customer']
78
+ @id = object['id']
79
+ @incomplete_fields = object['incomplete_fields']
80
+ @links = object['links']
81
+ @mandate = object['mandate']
82
+ @status = object['status']
83
+ @response = response
84
+ end
85
+
86
+ def api_response
87
+ ApiResponse.new(@response)
88
+ end
89
+
90
+ # Return the links that the resource has
91
+ def links
92
+ @payer_authorisation_links ||= Links.new(@links)
93
+ end
94
+
95
+ # Provides the payer_authorisation resource as a hash of all its readable attributes
96
+ def to_h
97
+ @object
98
+ end
99
+
100
+ class Links
101
+ def initialize(links)
102
+ @links = links || {}
103
+ end
104
+
105
+ def bank_account
106
+ @links['bank_account']
107
+ end
108
+
109
+ def customer
110
+ @links['customer']
111
+ end
112
+
113
+ def mandate
114
+ @links['mandate']
115
+ end
116
+ end
117
+ end
118
+ end
119
+ 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
@@ -71,6 +73,10 @@ module GoCardlessPro
71
73
  def payment
72
74
  @links['payment']
73
75
  end
76
+
77
+ def refund
78
+ @links['refund']
79
+ end
74
80
  end
75
81
  end
76
82
  end
@@ -0,0 +1,51 @@
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
+ #
17
+ # We also maintain a [static list of the tax rates for each
18
+ # jurisdiction](#appendix-tax-rates).
19
+ class TaxRate
20
+ attr_reader :end_date
21
+ attr_reader :id
22
+ attr_reader :jurisdiction
23
+ attr_reader :percentage
24
+ attr_reader :start_date
25
+ attr_reader :type
26
+
27
+ # Initialize a tax_rate resource instance
28
+ # @param object [Hash] an object returned from the API
29
+ def initialize(object, response = nil)
30
+ @object = object
31
+
32
+ @end_date = object['end_date']
33
+ @id = object['id']
34
+ @jurisdiction = object['jurisdiction']
35
+ @percentage = object['percentage']
36
+ @start_date = object['start_date']
37
+ @type = object['type']
38
+ @response = response
39
+ end
40
+
41
+ def api_response
42
+ ApiResponse.new(@response)
43
+ end
44
+
45
+ # Provides the tax_rate resource as a hash of all its readable attributes
46
+ def to_h
47
+ @object
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,5 +1,4 @@
1
1
  require_relative './base_service'
2
- require 'uri'
3
2
 
4
3
  # encoding: utf-8
5
4
  #
@@ -59,15 +58,6 @@ module GoCardlessPro
59
58
  def envelope_key
60
59
  'bank_details_lookups'
61
60
  end
62
-
63
- # take a URL with placeholder params and substitute them out for the actual value
64
- # @param url [String] the URL with placeholders in
65
- # @param param_map [Hash] a hash of placeholders and their actual values (which will be escaped)
66
- def sub_url(url, param_map)
67
- param_map.reduce(url) do |new_url, (param, value)|
68
- new_url.gsub(":#{param}", URI.escape(value))
69
- end
70
- end
71
61
  end
72
62
  end
73
63
  end
@@ -1,3 +1,5 @@
1
+ require 'cgi'
2
+
1
3
  module GoCardlessPro
2
4
  # Module that contains all services for making requests to the API.
3
5
  module Services
@@ -23,6 +25,15 @@ module GoCardlessPro
23
25
  def envelope_key
24
26
  raise NotImplementedError
25
27
  end
28
+
29
+ # take a URL with placeholder params and substitute them out for the actual value
30
+ # @param url [String] the URL with placeholders in
31
+ # @param param_map [Hash] a hash of placeholders and their actual values (which will be escaped)
32
+ def sub_url(url, param_map)
33
+ param_map.reduce(url) do |new_url, (param, value)|
34
+ new_url.gsub(":#{param}", CGI.escape(value))
35
+ end
36
+ end
26
37
  end
27
38
  end
28
39
  end