gocardless_pro 2.21.0 → 2.25.0

Sign up to get free protection for your applications and to get access to all the features.
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