gocardless_pro 0.3.0 → 1.0.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -29
  3. data/lib/gocardless_pro.rb +7 -3
  4. data/lib/gocardless_pro/api_response.rb +14 -0
  5. data/lib/gocardless_pro/client.rb +24 -12
  6. data/lib/gocardless_pro/list_response.rb +7 -3
  7. data/lib/gocardless_pro/request.rb +3 -11
  8. data/lib/gocardless_pro/resources/{helper.rb → bank_details_lookup.rb} +15 -4
  9. data/lib/gocardless_pro/resources/creditor.rb +14 -13
  10. data/lib/gocardless_pro/resources/creditor_bank_account.rb +14 -10
  11. data/lib/gocardless_pro/resources/customer.rb +8 -4
  12. data/lib/gocardless_pro/resources/customer_bank_account.rb +15 -13
  13. data/lib/gocardless_pro/resources/event.rb +6 -1
  14. data/lib/gocardless_pro/resources/mandate.rb +10 -7
  15. data/lib/gocardless_pro/resources/mandate_pdf.rb +42 -0
  16. data/lib/gocardless_pro/resources/payment.rb +12 -11
  17. data/lib/gocardless_pro/resources/payout.rb +9 -6
  18. data/lib/gocardless_pro/resources/redirect_flow.rb +24 -30
  19. data/lib/gocardless_pro/resources/refund.rb +15 -15
  20. data/lib/gocardless_pro/resources/subscription.rb +26 -22
  21. data/lib/gocardless_pro/response.rb +5 -0
  22. data/lib/gocardless_pro/services/bank_details_lookups_service.rb +55 -0
  23. data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +8 -9
  24. data/lib/gocardless_pro/services/creditors_service.rb +6 -7
  25. data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +15 -18
  26. data/lib/gocardless_pro/services/customers_service.rb +6 -7
  27. data/lib/gocardless_pro/services/events_service.rb +4 -6
  28. data/lib/gocardless_pro/services/mandate_pdfs_service.rb +63 -0
  29. data/lib/gocardless_pro/services/mandates_service.rb +12 -24
  30. data/lib/gocardless_pro/services/payments_service.rb +15 -16
  31. data/lib/gocardless_pro/services/payouts_service.rb +5 -6
  32. data/lib/gocardless_pro/services/redirect_flows_service.rb +13 -17
  33. data/lib/gocardless_pro/services/refunds_service.rb +16 -19
  34. data/lib/gocardless_pro/services/subscriptions_service.rb +10 -11
  35. data/lib/gocardless_pro/version.rb +1 -1
  36. data/spec/api_response_spec.rb +28 -0
  37. data/spec/resources/bank_details_lookup_spec.rb +39 -0
  38. data/spec/resources/creditor_spec.rb +0 -4
  39. data/spec/resources/{helper_spec.rb → mandate_pdf_spec.rb} +17 -1
  40. data/spec/resources/subscription_spec.rb +4 -4
  41. data/spec/services/bank_details_lookups_service_spec.rb +80 -0
  42. data/spec/services/creditor_bank_accounts_service_spec.rb +2 -0
  43. data/spec/services/creditors_service_spec.rb +2 -0
  44. data/spec/services/customer_bank_accounts_service_spec.rb +2 -0
  45. data/spec/services/customers_service_spec.rb +2 -0
  46. data/spec/services/events_service_spec.rb +2 -0
  47. data/spec/services/mandate_pdfs_service_spec.rb +80 -0
  48. data/spec/services/mandates_service_spec.rb +2 -0
  49. data/spec/services/payments_service_spec.rb +2 -0
  50. data/spec/services/payouts_service_spec.rb +2 -0
  51. data/spec/services/refunds_service_spec.rb +2 -0
  52. data/spec/services/subscriptions_service_spec.rb +26 -24
  53. metadata +17 -8
  54. data/lib/gocardless_pro/services/helpers_service.rb +0 -99
  55. data/spec/services/helpers_service_spec.rb +0 -122
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc56592c0c41639dd981845de276d9634b423c9c
4
- data.tar.gz: 54d4dd9ed407bb39e3ce73de1fe0acfab24d3b61
3
+ metadata.gz: 0679426d50fd7a646344adfbe02b150edec3f19a
4
+ data.tar.gz: 326eb4aba24167005218f2cc4b3cdc787afaef11
5
5
  SHA512:
6
- metadata.gz: 48da3d84a089b8b8de211e397c21bdb8c4c495c743b22286a90f975a2858be91469f80e0d14be88efeb29592f4829ac69a371177daae2a918d7374bb85b5297b
7
- data.tar.gz: c328b8e0cd31285c2979c80bf79854e65b672352d3f7fdc3c0df4f655de32f91a34cdbab950a164fccc5974ef1859790578919eafe210ff0a207b0e2ecb0a137
6
+ metadata.gz: 107065812a3eb12360a3dc8e10b3920f04886277fb9671079b224d70489a7373773691170ce46401660679b2b2b43c04cc59279e59ee1d4665684d30c58b365d
7
+ data.tar.gz: 03ead3f29fe550c6b33883f53bbeb2d6dcdc0d8ec6795462c4d6d7aa3aafc7019c13159c430ac4904672b93e107dbbb23628f4317fc2da2d01a0566c09f92cea
data/README.md CHANGED
@@ -1,11 +1,8 @@
1
1
  # Ruby Client for GoCardless Pro API
2
2
 
3
- - [YARD Docs](http://gocardless.github.io/pro-client-ruby/)
4
3
  - [GoCardless Pro API Docs](https://developer.gocardless.com/pro/)
5
4
  - [RubyGems](https://rubygems.org/gems/gocardless_pro)
6
5
 
7
- This client is still in beta and is subject to change. Until a stable major version is released you should expect breaking changes.
8
-
9
6
  Add this line to your application's Gemfile:
10
7
 
11
8
  ```ruby
@@ -21,17 +18,17 @@ require 'gocardless_pro'
21
18
  ## Usage Examples
22
19
 
23
20
  - In the case of a single response, the client will return you an instance of the resource
24
- - In the case of list responses, the client will return an instance of `ListResponse`, which is enumerable.
21
+ - In the case of list responses, the client will return an instance of `ListResponse`.
25
22
  - You can also call `#all` to get a lazily paginated list of resource that will deal with making extra API requests to paginate through all the data
26
23
 
27
24
  ### Initialising the client
28
25
 
29
26
  The client is initialised with an Access Token.
30
- You can also pass in `environment` as `:sandbox` to make requests to the sandbox environment rather than the live one.
27
+ You can also pass in `environment` as `:sandbox` to make requests to the sandbox environment rather than production.
31
28
 
32
29
  ```rb
33
30
  @client = GoCardlessPro::Client.new(
34
- token: ENV["GOCARDLESS_TOKEN"]
31
+ access_token: ENV["GOCARDLESS_TOKEN"]
35
32
  )
36
33
  ```
37
34
 
@@ -71,6 +68,12 @@ As with list, the last argument can be an options hash, with any URL parameters
71
68
  @client.customers.get(customers_id, params: { limit: 200 })
72
69
  ```
73
70
 
71
+ Both individual resource and `ListResponse` instances provide an `api_response` method, which lets you access the following properties of the request:
72
+
73
+ - `status`
74
+ - `headers`
75
+ - `body`
76
+
74
77
  ### POST/PUT Requests
75
78
 
76
79
  For POST and PUT requests you need to pass in the body in under the `params` key:
@@ -91,32 +94,14 @@ As with GET requests, if any parameters are required they come first:
91
94
  @client.customers.update(customer_id, {...})
92
95
  ```
93
96
 
94
- ### Custom Headers
95
-
96
- If you need to pass in a custom header to an endpoint, you can pass in a `headers` object to the options hash:
97
-
98
- ```rb
99
- @client.helpers.mandate({
100
- params: {
101
- account_number: 200000,
102
- ...
103
- },
104
- headers: {
105
- 'Accept': 'application/pdf'
106
- }
107
- })
108
- ```
109
-
110
- There are very few endpoints in the API that require custom headers. Currently, the only ones that do are [helpers](https://developer.gocardless.com/pro/#api-endpoints-helpers).
111
-
112
97
  ### Handling failures
113
98
 
114
- When an API returns an error, the client __will raise__ an error that corresponds to the type of error. All errors subclass `GoCardless::Error`. There are four errors that could be thrown:
99
+ When an API returns an error, the client __will raise__ an error that corresponds to the type of error. All errors subclass `GoCardlessPro::Error`. There are four errors that could be thrown:
115
100
 
116
- - `GoCardless::GoCardlessError`
117
- - `GoCardless::InvalidApiUsageError`
118
- - `GoCardless::InvalidStateError`
119
- - `GoCardless::ValidationError`
101
+ - `GoCardlessPro::GoCardlessError`
102
+ - `GoCardlessPro::InvalidApiUsageError`
103
+ - `GoCardlessPro::InvalidStateError`
104
+ - `GoCardlessPro::ValidationError`
120
105
 
121
106
  These errors are fully documented in the [API documentation](https://developer.gocardless.com/pro/#overview-errors).
122
107
 
@@ -33,6 +33,10 @@ require_relative 'gocardless_pro/error/invalid_state_error'
33
33
  require_relative 'gocardless_pro/paginator'
34
34
  require_relative 'gocardless_pro/request'
35
35
  require_relative 'gocardless_pro/response'
36
+ require_relative 'gocardless_pro/api_response'
37
+
38
+ require_relative 'gocardless_pro/resources/bank_details_lookup'
39
+ require_relative 'gocardless_pro/services/bank_details_lookups_service'
36
40
 
37
41
  require_relative 'gocardless_pro/resources/creditor'
38
42
  require_relative 'gocardless_pro/services/creditors_service'
@@ -49,12 +53,12 @@ require_relative 'gocardless_pro/services/customer_bank_accounts_service'
49
53
  require_relative 'gocardless_pro/resources/event'
50
54
  require_relative 'gocardless_pro/services/events_service'
51
55
 
52
- require_relative 'gocardless_pro/resources/helper'
53
- require_relative 'gocardless_pro/services/helpers_service'
54
-
55
56
  require_relative 'gocardless_pro/resources/mandate'
56
57
  require_relative 'gocardless_pro/services/mandates_service'
57
58
 
59
+ require_relative 'gocardless_pro/resources/mandate_pdf'
60
+ require_relative 'gocardless_pro/services/mandate_pdfs_service'
61
+
58
62
  require_relative 'gocardless_pro/resources/payment'
59
63
  require_relative 'gocardless_pro/services/payments_service'
60
64
 
@@ -0,0 +1,14 @@
1
+ module GoCardlessPro
2
+ # wraps a faraday response object with some accessors
3
+ class ApiResponse
4
+ extend Forwardable
5
+
6
+ def initialize(response)
7
+ @response = response
8
+ end
9
+
10
+ def_delegator :@response, :headers
11
+ def_delegator :@response, :body
12
+ def_delegator :@response, :status_code
13
+ end
14
+ end
@@ -3,6 +3,11 @@ module GoCardlessPro
3
3
  class Client
4
4
  extend Forwardable
5
5
 
6
+ # Access to the service for bank_details_lookup to make API calls
7
+ def bank_details_lookups
8
+ @bank_details_lookups ||= Services::BankDetailsLookupsService.new(@api_service)
9
+ end
10
+
6
11
  # Access to the service for creditor to make API calls
7
12
  def creditors
8
13
  @creditors ||= Services::CreditorsService.new(@api_service)
@@ -28,16 +33,16 @@ module GoCardlessPro
28
33
  @events ||= Services::EventsService.new(@api_service)
29
34
  end
30
35
 
31
- # Access to the service for helper to make API calls
32
- def helpers
33
- @helpers ||= Services::HelpersService.new(@api_service)
34
- end
35
-
36
36
  # Access to the service for mandate to make API calls
37
37
  def mandates
38
38
  @mandates ||= Services::MandatesService.new(@api_service)
39
39
  end
40
40
 
41
+ # Access to the service for mandate_pdf to make API calls
42
+ def mandate_pdfs
43
+ @mandate_pdfs ||= Services::MandatePdfsService.new(@api_service)
44
+ end
45
+
41
46
  # Access to the service for payment to make API calls
42
47
  def payments
43
48
  @payments ||= Services::PaymentsService.new(@api_service)
@@ -108,7 +113,7 @@ module GoCardlessPro
108
113
  def default_options
109
114
  {
110
115
  default_headers: {
111
- 'GoCardless-Version' => '2015-04-29',
116
+ 'GoCardless-Version' => '2015-07-06',
112
117
  'User-Agent' => "#{user_agent}",
113
118
  'Content-Type' => 'application/json'
114
119
  }
@@ -121,14 +126,21 @@ module GoCardlessPro
121
126
  gem_name = 'gocardless_pro'
122
127
  gem_info = "#{gem_name}"
123
128
  gem_info += "/v#{ GoCardlessPro::VERSION}" if defined?(GoCardlessPro::VERSION)
129
+
124
130
  ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
131
+
125
132
  ruby_version = RUBY_VERSION
126
- ruby_version += " p#{RUBY_PATCHLEVEL}" if defined?(RUBY_PATCHLEVEL)
127
- comment = ["#{ruby_engine} #{ruby_version}"]
128
- comment << "gocardless_pro v#{ GoCardlessPro::VERSION}"
129
- comment << "faraday v#{Faraday::VERSION}"
130
- comment << RUBY_PLATFORM if defined?(RUBY_PLATFORM)
131
- "#{gem_info} (#{comment.join('; ')})"
133
+ ruby_version += "p#{RUBY_PATCHLEVEL}" if defined?(RUBY_PATCHLEVEL)
134
+
135
+ interpreter_version = defined?(JRUBY_VERSION) ? JRUBY_VERSION : RUBY_VERSION
136
+
137
+ comment = [
138
+ "#{ruby_engine}/#{ruby_version}",
139
+ "#{RUBY_ENGINE}/#{interpreter_version}",
140
+ "#{RUBY_PLATFORM}"
141
+ ]
142
+ comment << "faraday/#{Faraday::VERSION}"
143
+ "#{gem_info} #{comment.join(' ')}"
132
144
  end
133
145
  end
134
146
  end
@@ -9,21 +9,25 @@ module GoCardlessPro
9
9
  # @option option :resource_class the class for the resource returned by the API
10
10
  # @option option :unenveloped_body the parsed response from the API
11
11
  def initialize(options = {})
12
- @raw_response = options.fetch(:raw_response)
12
+ @response = options.fetch(:response)
13
13
  @resource_class = options.fetch(:resource_class)
14
14
  @unenveloped_body = options.fetch(:unenveloped_body)
15
15
 
16
16
  @records = @unenveloped_body.map { |item| @resource_class.new(item) }
17
17
  end
18
18
 
19
+ def api_response
20
+ @api_response ||= ApiResponse.new(@response)
21
+ end
22
+
19
23
  # return the before cursor for paginating
20
24
  def before
21
- @raw_response.body['meta']['cursors']['before']
25
+ @response.body['meta']['cursors']['before']
22
26
  end
23
27
 
24
28
  # return the after cursor for paginating
25
29
  def after
26
- @raw_response.body['meta']['cursors']['after']
30
+ @response.body['meta']['cursors']['after']
27
31
  end
28
32
  end
29
33
  end
@@ -42,10 +42,10 @@ module GoCardlessPro
42
42
  def request_body
43
43
  if @method == :get
44
44
  nil
45
- elsif @method == :post || @method == :put
45
+ elsif [:post, :put, :delete].include?(@method)
46
46
  @given_options.fetch(:params, {})
47
47
  else
48
- fail "unknown method #{@method}"
48
+ fail "Unknown request method #{@method}"
49
49
  end
50
50
  end
51
51
 
@@ -53,17 +53,9 @@ module GoCardlessPro
53
53
  def request_query
54
54
  if @method == :get
55
55
  @given_options.fetch(:params, {})
56
- elsif @method == :post || @method == :put
57
- {}
58
56
  else
59
- fail "unknown method #{@method}"
57
+ {}
60
58
  end
61
59
  end
62
-
63
- private
64
-
65
- def options
66
- { headers: @headers, body: @body, query: @query }
67
- end
68
60
  end
69
61
  end
@@ -11,13 +11,24 @@ require 'uri'
11
11
  module GoCardlessPro
12
12
  # A module containing classes for each of the resources in the GC Api
13
13
  module Resources
14
- #
15
- # Represents an instance of a helper resource returned from the API
16
- class Helper
14
+ # Look up the name and reachability of a bank.
15
+ # Represents an instance of a bank_details_lookup resource returned from the API
16
+ class BankDetailsLookup
17
+ attr_reader :available_debit_schemes
18
+
19
+ attr_reader :bank_name
17
20
  # initialize a resource instance
18
21
  # @param object [Hash] an object returned from the API
19
- def initialize(object)
22
+ def initialize(object, response = nil)
20
23
  @object = object
24
+
25
+ @available_debit_schemes = object['available_debit_schemes']
26
+ @bank_name = object['bank_name']
27
+ @response = response
28
+ end
29
+
30
+ def api_response
31
+ ApiResponse.new(@response)
21
32
  end
22
33
 
23
34
  # Provides the resource as a hash of all it's readable attributes
@@ -11,16 +11,14 @@ require 'uri'
11
11
  module GoCardlessPro
12
12
  # A module containing classes for each of the resources in the GC Api
13
13
  module Resources
14
- # Each
15
- # [payment](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payments)
16
- # taken through the API is linked to a "creditor", to whom the payment is then
17
- # paid out. In most cases your organisation will have a single "creditor", but
18
- # the API also supports collecting payments on behalf of others.
14
+ # Each [payment](#core-endpoints-payments) taken through the API is linked to
15
+ # a "creditor", to whom the payment is then paid out. In most cases your
16
+ # organisation will have a single "creditor", but the API also supports
17
+ # collecting payments on behalf of others.
19
18
  #
20
- #
21
- # Please get in touch if you wish to use this endpoint. Currently, for Anti
22
- # Money Laundering reasons, any creditors you add must be directly related to
23
- # your organisation.
19
+ # Please get in touch if you
20
+ # wish to use this endpoint. Currently, for Anti Money Laundering reasons, any
21
+ # creditors you add must be directly related to your organisation.
24
22
  # Represents an instance of a creditor resource returned from the API
25
23
  class Creditor
26
24
  attr_reader :address_line1
@@ -44,7 +42,7 @@ module GoCardlessPro
44
42
  attr_reader :region
45
43
  # initialize a resource instance
46
44
  # @param object [Hash] an object returned from the API
47
- def initialize(object)
45
+ def initialize(object, response = nil)
48
46
  @object = object
49
47
 
50
48
  @address_line1 = object['address_line1']
@@ -58,6 +56,11 @@ module GoCardlessPro
58
56
  @name = object['name']
59
57
  @postal_code = object['postal_code']
60
58
  @region = object['region']
59
+ @response = response
60
+ end
61
+
62
+ def api_response
63
+ ApiResponse.new(@response)
61
64
  end
62
65
 
63
66
  # return the links that the resource has
@@ -67,9 +70,7 @@ module GoCardlessPro
67
70
 
68
71
  default_eur_payout_account: '',
69
72
 
70
- default_gbp_payout_account: '',
71
-
72
- logo: ''
73
+ default_gbp_payout_account: ''
73
74
 
74
75
  }.keys.sort
75
76
  ).new(*@links.sort.map(&:last))
@@ -12,16 +12,15 @@ module GoCardlessPro
12
12
  # A module containing classes for each of the resources in the GC Api
13
13
  module Resources
14
14
  # Creditor Bank Accounts hold the bank details of a
15
- # [creditor](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-creditor).
16
- # These are the bank accounts which your
17
- # [payouts](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-payouts)
18
- # will be sent to.
15
+ # [creditor](#core-endpoints-creditor). These are the bank accounts which your
16
+ # [payouts](#core-endpoints-payouts) will be sent to.
19
17
  #
20
- # Note that creditor bank accounts must be unique,
21
- # and so you will encounter a `bank_account_exists` error if you try to create
22
- # a duplicate bank account. You may wish to handle this by updating the
23
- # existing record instead, the ID of which will be provided as
24
- # `links[creditor_bank_account]` in the error response.
18
+ # Note that
19
+ # creditor bank accounts must be unique, and so you will encounter a
20
+ # `bank_account_exists` error if you try to create a duplicate bank account.
21
+ # You may wish to handle this by updating the existing record instead, the ID
22
+ # of which will be provided as `links[creditor_bank_account]` in the error
23
+ # response.
25
24
  # Represents an instance of a creditor_bank_account resource returned from the API
26
25
  class CreditorBankAccount
27
26
  attr_reader :account_holder_name
@@ -43,7 +42,7 @@ module GoCardlessPro
43
42
  attr_reader :metadata
44
43
  # initialize a resource instance
45
44
  # @param object [Hash] an object returned from the API
46
- def initialize(object)
45
+ def initialize(object, response = nil)
47
46
  @object = object
48
47
 
49
48
  @account_holder_name = object['account_holder_name']
@@ -56,6 +55,11 @@ module GoCardlessPro
56
55
  @id = object['id']
57
56
  @links = object['links']
58
57
  @metadata = object['metadata']
58
+ @response = response
59
+ end
60
+
61
+ def api_response
62
+ ApiResponse.new(@response)
59
63
  end
60
64
 
61
65
  # return the links that the resource has
@@ -13,9 +13,8 @@ module GoCardlessPro
13
13
  module Resources
14
14
  # Customer objects hold the contact details for a customer. A customer can
15
15
  # have several [customer bank
16
- # accounts](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customer-bank-accounts),
17
- # which in turn can have several Direct Debit
18
- # [mandates](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates).
16
+ # accounts](#core-endpoints-customer-bank-accounts), which in turn can have
17
+ # several Direct Debit [mandates](#core-endpoints-mandates).
19
18
  # Represents an instance of a customer resource returned from the API
20
19
  class Customer
21
20
  attr_reader :address_line1
@@ -47,7 +46,7 @@ module GoCardlessPro
47
46
  attr_reader :region
48
47
  # initialize a resource instance
49
48
  # @param object [Hash] an object returned from the API
50
- def initialize(object)
49
+ def initialize(object, response = nil)
51
50
  @object = object
52
51
 
53
52
  @address_line1 = object['address_line1']
@@ -64,6 +63,11 @@ module GoCardlessPro
64
63
  @metadata = object['metadata']
65
64
  @postal_code = object['postal_code']
66
65
  @region = object['region']
66
+ @response = response
67
+ end
68
+
69
+ def api_response
70
+ ApiResponse.new(@response)
67
71
  end
68
72
 
69
73
  # Provides the resource as a hash of all it's readable attributes
@@ -12,18 +12,15 @@ module GoCardlessPro
12
12
  # A module containing classes for each of the resources in the GC Api
13
13
  module Resources
14
14
  # Customer Bank Accounts hold the bank details of a
15
- # [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers).
16
- # They always belong to a
17
- # [customer](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-customers),
18
- # and may be linked to several Direct Debit
19
- # [mandates](https://developer.gocardless.com/pro/2015-04-29/#api-endpoints-mandates).
20
-
21
- # #
22
- # Note that customer bank accounts must be unique, and so you will
23
- # encounter a `bank_account_exists` error if you try to create a duplicate
24
- # bank account. You may wish to handle this by updating the existing record
25
- # instead, the ID of which will be provided as links[customer_bank_account] in
26
- # the error response.
15
+ # [customer](#core-endpoints-customers). They always belong to a
16
+ # [customer](#core-endpoints-customers), and may be linked to several Direct
17
+ # Debit [mandates](#core-endpoints-mandates).
18
+ #
19
+ # Note that customer bank
20
+ # accounts must be unique, and so you will encounter a `bank_account_exists`
21
+ # error if you try to create a duplicate bank account. You may wish to handle
22
+ # this by updating the existing record instead, the ID of which will be
23
+ # provided as links[customer_bank_account] in the error response.
27
24
  # Represents an instance of a customer_bank_account resource returned from the API
28
25
  class CustomerBankAccount
29
26
  attr_reader :account_holder_name
@@ -45,7 +42,7 @@ module GoCardlessPro
45
42
  attr_reader :metadata
46
43
  # initialize a resource instance
47
44
  # @param object [Hash] an object returned from the API
48
- def initialize(object)
45
+ def initialize(object, response = nil)
49
46
  @object = object
50
47
 
51
48
  @account_holder_name = object['account_holder_name']
@@ -58,6 +55,11 @@ module GoCardlessPro
58
55
  @id = object['id']
59
56
  @links = object['links']
60
57
  @metadata = object['metadata']
58
+ @response = response
59
+ end
60
+
61
+ def api_response
62
+ ApiResponse.new(@response)
61
63
  end
62
64
 
63
65
  # return the links that the resource has