gocardless_pro 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -0
  3. data/lib/gocardless_pro/resources/bank_details_lookup.rb +3 -0
  4. data/lib/gocardless_pro/resources/creditor.rb +4 -1
  5. data/lib/gocardless_pro/resources/creditor_bank_account.rb +12 -9
  6. data/lib/gocardless_pro/resources/customer_bank_account.rb +4 -1
  7. data/lib/gocardless_pro/resources/event.rb +4 -1
  8. data/lib/gocardless_pro/resources/mandate.rb +4 -1
  9. data/lib/gocardless_pro/resources/mandate_pdf.rb +1 -1
  10. data/lib/gocardless_pro/resources/payment.rb +8 -5
  11. data/lib/gocardless_pro/resources/payout.rb +8 -4
  12. data/lib/gocardless_pro/resources/redirect_flow.rb +8 -1
  13. data/lib/gocardless_pro/resources/refund.rb +4 -1
  14. data/lib/gocardless_pro/resources/subscription.rb +4 -1
  15. data/lib/gocardless_pro/services/payouts_service.rb +1 -1
  16. data/lib/gocardless_pro/version.rb +1 -1
  17. data/spec/resources/bank_details_lookup_spec.rb +16 -1
  18. data/spec/resources/creditor_bank_account_spec.rb +13 -1
  19. data/spec/resources/creditor_spec.rb +13 -1
  20. data/spec/resources/customer_bank_account_spec.rb +13 -1
  21. data/spec/resources/customer_spec.rb +8 -1
  22. data/spec/resources/event_spec.rb +13 -1
  23. data/spec/resources/mandate_pdf_spec.rb +8 -1
  24. data/spec/resources/mandate_spec.rb +13 -1
  25. data/spec/resources/payment_spec.rb +13 -1
  26. data/spec/resources/payout_spec.rb +13 -1
  27. data/spec/resources/redirect_flow_spec.rb +21 -1
  28. data/spec/resources/refund_spec.rb +13 -1
  29. data/spec/resources/subscription_spec.rb +13 -1
  30. data/spec/services/bank_details_lookups_service_spec.rb +8 -4
  31. data/spec/services/creditor_bank_accounts_service_spec.rb +25 -21
  32. data/spec/services/creditors_service_spec.rb +24 -19
  33. data/spec/services/customer_bank_accounts_service_spec.rb +28 -23
  34. data/spec/services/customers_service_spec.rb +24 -19
  35. data/spec/services/events_service_spec.rb +17 -13
  36. data/spec/services/mandate_pdfs_service_spec.rb +5 -4
  37. data/spec/services/mandates_service_spec.rb +32 -27
  38. data/spec/services/payments_service_spec.rb +32 -27
  39. data/spec/services/payouts_service_spec.rb +17 -13
  40. data/spec/services/redirect_flows_service_spec.rb +19 -15
  41. data/spec/services/refunds_service_spec.rb +24 -19
  42. data/spec/services/subscriptions_service_spec.rb +28 -23
  43. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0679426d50fd7a646344adfbe02b150edec3f19a
4
- data.tar.gz: 326eb4aba24167005218f2cc4b3cdc787afaef11
3
+ metadata.gz: 336757aa0c2b6a8259d999fff9b6c47b08a81ac9
4
+ data.tar.gz: 8a9254232e7c5b5df0f3ff1cd4ee31a3a0e5c8ab
5
5
  SHA512:
6
- metadata.gz: 107065812a3eb12360a3dc8e10b3920f04886277fb9671079b224d70489a7373773691170ce46401660679b2b2b43c04cc59279e59ee1d4665684d30c58b365d
7
- data.tar.gz: 03ead3f29fe550c6b33883f53bbeb2d6dcdc0d8ec6795462c4d6d7aa3aafc7019c13159c430ac4904672b93e107dbbb23628f4317fc2da2d01a0566c09f92cea
6
+ metadata.gz: d06593be915e27b49c3a227492380e92d81b5461a6dc16c4ab094d3c45640bf8405a036890e0cb98ef1194533f05bc74ea92a2c2ac9fdcd07726b0423a09818d
7
+ data.tar.gz: 6d515b60b723a53c24145fdd55c75fb0de95ab6618977e2055e612ca76da8178e8a570d5da66590ae6793bb7c750ee9389dc3629bfb186b774a4ce8e2a1d69bf
data/README.md CHANGED
@@ -114,7 +114,16 @@ The error has the following methods to allow you to access the information from
114
114
  - `#request_id`
115
115
  - `#errors`
116
116
 
117
+ ### Using the OAuth API
118
+
119
+ The API includes [OAuth](https://developer.gocardless.com/pro/2015-07-06/#guides-oauth) functionality, which allows you to work with other users' GoCardless accounts. Once a user approves you, you can use the GoCardless API on their behalf and receive their webhooks.
120
+
121
+ OAuth simply provides a means by which you obtain an access token - once you have this access token, you can use this gem as usual.
122
+
123
+ We recommend using the [oauth2](https://github.com/intridea/oauth2) gem to handle the authorisation process and gain a token. For an example of this in action, see our [open-source OAuth demo app](https://github.com/gocardless/oauth-demo/blob/master/app.rb#L46).
124
+
117
125
  ## Supporting Ruby < 2.0.0
126
+
118
127
  The client only supports Ruby >= 2.0.0 out of the box due to our use of
119
128
  Enumerable::Lazy for lazy loading of paginated API resources.
120
129
 
@@ -17,6 +17,8 @@ module GoCardlessPro
17
17
  attr_reader :available_debit_schemes
18
18
 
19
19
  attr_reader :bank_name
20
+
21
+ attr_reader :bic
20
22
  # initialize a resource instance
21
23
  # @param object [Hash] an object returned from the API
22
24
  def initialize(object, response = nil)
@@ -24,6 +26,7 @@ module GoCardlessPro
24
26
 
25
27
  @available_debit_schemes = object['available_debit_schemes']
26
28
  @bank_name = object['bank_name']
29
+ @bic = object['bic']
27
30
  @response = response
28
31
  end
29
32
 
@@ -65,6 +65,9 @@ module GoCardlessPro
65
65
 
66
66
  # return the links that the resource has
67
67
  def links
68
+ valid_link_keys = %w(default_eur_payout_account default_gbp_payout_account )
69
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
70
+
68
71
  Struct.new(
69
72
  *{
70
73
 
@@ -73,7 +76,7 @@ module GoCardlessPro
73
76
  default_gbp_payout_account: ''
74
77
 
75
78
  }.keys.sort
76
- ).new(*@links.sort.map(&:last))
79
+ ).new(*valid_links.sort.map(&:last))
77
80
  end
78
81
 
79
82
  # Provides the resource as a hash of all it's readable attributes
@@ -12,15 +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](#core-endpoints-creditor). These are the bank accounts which your
16
- # [payouts](#core-endpoints-payouts) will be sent to.
15
+ # [creditor](#whitelabel-partner-endpoints-creditors). These are the bank
16
+ # accounts which your [payouts](#core-endpoints-payouts) will be sent to.
17
17
  #
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.
18
+ #
19
+ # Note that creditor bank accounts must be unique, and so you will
20
+ # encounter a `bank_account_exists` error if you try to create a duplicate
21
+ # bank account. You may wish to handle this by updating the existing record
22
+ # instead, the ID of which will be provided as `links[creditor_bank_account]`
23
+ # in the error response.
24
24
  # Represents an instance of a creditor_bank_account resource returned from the API
25
25
  class CreditorBankAccount
26
26
  attr_reader :account_holder_name
@@ -64,13 +64,16 @@ module GoCardlessPro
64
64
 
65
65
  # return the links that the resource has
66
66
  def links
67
+ valid_link_keys = %w(creditor )
68
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
69
+
67
70
  Struct.new(
68
71
  *{
69
72
 
70
73
  creditor: ''
71
74
 
72
75
  }.keys.sort
73
- ).new(*@links.sort.map(&:last))
76
+ ).new(*valid_links.sort.map(&:last))
74
77
  end
75
78
 
76
79
  # Provides the resource as a hash of all it's readable attributes
@@ -64,13 +64,16 @@ module GoCardlessPro
64
64
 
65
65
  # return the links that the resource has
66
66
  def links
67
+ valid_link_keys = %w(customer )
68
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
69
+
67
70
  Struct.new(
68
71
  *{
69
72
 
70
73
  customer: ''
71
74
 
72
75
  }.keys.sort
73
- ).new(*@links.sort.map(&:last))
76
+ ).new(*valid_links.sort.map(&:last))
74
77
  end
75
78
 
76
79
  # Provides the resource as a hash of all it's readable attributes
@@ -48,6 +48,9 @@ module GoCardlessPro
48
48
 
49
49
  # return the links that the resource has
50
50
  def links
51
+ valid_link_keys = %w(mandate new_customer_bank_account parent_event payment payout previous_customer_bank_account refund subscription )
52
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
53
+
51
54
  Struct.new(
52
55
  *{
53
56
 
@@ -68,7 +71,7 @@ module GoCardlessPro
68
71
  subscription: ''
69
72
 
70
73
  }.keys.sort
71
- ).new(*@links.sort.map(&:last))
74
+ ).new(*valid_links.sort.map(&:last))
72
75
  end
73
76
 
74
77
  # Provides the resource as a hash of all it's readable attributes
@@ -53,6 +53,9 @@ module GoCardlessPro
53
53
 
54
54
  # return the links that the resource has
55
55
  def links
56
+ valid_link_keys = %w(creditor customer_bank_account )
57
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
58
+
56
59
  Struct.new(
57
60
  *{
58
61
 
@@ -61,7 +64,7 @@ module GoCardlessPro
61
64
  customer_bank_account: ''
62
65
 
63
66
  }.keys.sort
64
- ).new(*@links.sort.map(&:last))
67
+ ).new(*valid_links.sort.map(&:last))
65
68
  end
66
69
 
67
70
  # Provides the resource as a hash of all it's readable attributes
@@ -12,7 +12,7 @@ module GoCardlessPro
12
12
  # A module containing classes for each of the resources in the GC Api
13
13
  module Resources
14
14
  # Mandate PDFs allow you to easily display [scheme-rules
15
- # compliant](#ui-compliance-requirements) Direct Debit mandates to your
15
+ # compliant](#appendix-compliance-requirements) Direct Debit mandates to your
16
16
  # customers.
17
17
  # Represents an instance of a mandate_pdf resource returned from the API
18
18
  class MandatePdf
@@ -13,11 +13,11 @@ module GoCardlessPro
13
13
  module Resources
14
14
  # Payment objects represent payments from a
15
15
  # [customer](#core-endpoints-customers) to a
16
- # [creditor](#core-endpoints-creditors), taken against a Direct Debit
17
- # [mandate](#core-endpoints-mandates).
16
+ # [creditor](#whitelabel-partner-endpoints-creditors), taken against a Direct
17
+ # Debit [mandate](#core-endpoints-mandates).
18
18
  #
19
- # GoCardless will notify you via
20
- # a [webhook](#webhooks) whenever the state of a payment changes.
19
+ # GoCardless will notify
20
+ # you via a [webhook](#webhooks) whenever the state of a payment changes.
21
21
  # Represents an instance of a payment resource returned from the API
22
22
  class Payment
23
23
  attr_reader :amount
@@ -64,6 +64,9 @@ module GoCardlessPro
64
64
 
65
65
  # return the links that the resource has
66
66
  def links
67
+ valid_link_keys = %w(creditor mandate payout subscription )
68
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
69
+
67
70
  Struct.new(
68
71
  *{
69
72
 
@@ -76,7 +79,7 @@ module GoCardlessPro
76
79
  subscription: ''
77
80
 
78
81
  }.keys.sort
79
- ).new(*@links.sort.map(&:last))
82
+ ).new(*valid_links.sort.map(&:last))
80
83
  end
81
84
 
82
85
  # Provides the resource as a hash of all it's readable attributes
@@ -12,9 +12,10 @@ module GoCardlessPro
12
12
  # A module containing classes for each of the resources in the GC Api
13
13
  module Resources
14
14
  # Payouts represent transfers from GoCardless to a
15
- # [creditor](#core-endpoints-creditors). Each payout contains the funds
16
- # collected from one or many [payments](#core-endpoints-payments). Payouts are
17
- # created automatically after a payment has been successfully collected.
15
+ # [creditor](#whitelabel-partner-endpoints-creditors). Each payout contains
16
+ # the funds collected from one or many [payments](#core-endpoints-payments).
17
+ # Payouts are created automatically after a payment has been successfully
18
+ # collected.
18
19
  # Represents an instance of a payout resource returned from the API
19
20
  class Payout
20
21
  attr_reader :amount
@@ -49,6 +50,9 @@ module GoCardlessPro
49
50
 
50
51
  # return the links that the resource has
51
52
  def links
53
+ valid_link_keys = %w(creditor creditor_bank_account )
54
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
55
+
52
56
  Struct.new(
53
57
  *{
54
58
 
@@ -57,7 +61,7 @@ module GoCardlessPro
57
61
  creditor_bank_account: ''
58
62
 
59
63
  }.keys.sort
60
- ).new(*@links.sort.map(&:last))
64
+ ).new(*valid_links.sort.map(&:last))
61
65
  end
62
66
 
63
67
  # Provides the resource as a hash of all it's readable attributes
@@ -80,15 +80,22 @@ module GoCardlessPro
80
80
 
81
81
  # return the links that the resource has
82
82
  def links
83
+ valid_link_keys = %w(creditor customer customer_bank_account mandate )
84
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
85
+
83
86
  Struct.new(
84
87
  *{
85
88
 
86
89
  creditor: '',
87
90
 
91
+ customer: '',
92
+
93
+ customer_bank_account: '',
94
+
88
95
  mandate: ''
89
96
 
90
97
  }.keys.sort
91
- ).new(*@links.sort.map(&:last))
98
+ ).new(*valid_links.sort.map(&:last))
92
99
  end
93
100
 
94
101
  # Provides the resource as a hash of all it's readable attributes
@@ -53,13 +53,16 @@ module GoCardlessPro
53
53
 
54
54
  # return the links that the resource has
55
55
  def links
56
+ valid_link_keys = %w(payment )
57
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
58
+
56
59
  Struct.new(
57
60
  *{
58
61
 
59
62
  payment: ''
60
63
 
61
64
  }.keys.sort
62
- ).new(*@links.sort.map(&:last))
65
+ ).new(*valid_links.sort.map(&:last))
63
66
  end
64
67
 
65
68
  # Provides the resource as a hash of all it's readable attributes
@@ -141,13 +141,16 @@ module GoCardlessPro
141
141
 
142
142
  # return the links that the resource has
143
143
  def links
144
+ valid_link_keys = %w(mandate )
145
+ valid_links = @links.select { |key, _| valid_link_keys.include?(key) }
146
+
144
147
  Struct.new(
145
148
  *{
146
149
 
147
150
  mandate: ''
148
151
 
149
152
  }.keys.sort
150
- ).new(*@links.sort.map(&:last))
153
+ ).new(*valid_links.sort.map(&:last))
151
154
  end
152
155
 
153
156
  # Provides the resource as a hash of all it's readable attributes
@@ -40,7 +40,7 @@ module GoCardlessPro
40
40
 
41
41
  # Retrieves the details of a single payout. For an example of how to reconcile
42
42
  # the transactions in a payout, see [this
43
- # guide](#events-fetching-events-for-a-payout).
43
+ # guide](#events-reconciling-payouts-with-events).
44
44
  # Example URL: /payouts/:identity
45
45
  #
46
46
  # @param identity # Unique identifier, beginning with "PO".
@@ -4,5 +4,5 @@ end
4
4
 
5
5
  module GoCardlessPro
6
6
  # Current version of the GC gem
7
- VERSION = '1.0.0'
7
+ VERSION = '1.0.1'
8
8
  end
@@ -13,10 +13,14 @@ describe GoCardlessPro::Resources::BankDetailsLookup do
13
13
  "bank_name" => "bank_name-input",
14
14
 
15
15
 
16
+
17
+ "bic" => "bic-input",
18
+
19
+
16
20
  }
17
21
  end
18
22
 
19
- it "can be initialized from an uneveloped response" do
23
+ it "can be initialized from an unenveloped response" do
20
24
  resource = described_class.new(data)
21
25
 
22
26
 
@@ -27,8 +31,19 @@ describe GoCardlessPro::Resources::BankDetailsLookup do
27
31
  expect(resource.bank_name).to eq("bank_name-input")
28
32
 
29
33
 
34
+
35
+ expect(resource.bic).to eq("bic-input")
36
+
37
+
38
+ end
39
+
40
+ it "can handle new attributes without erroring" do
41
+ data["foo"] = "bar"
42
+ expect { described_class.new(data) }.to_not raise_error
30
43
  end
31
44
 
45
+
46
+
32
47
  describe "#to_h" do
33
48
  it "returns a hash representing the resource" do
34
49
  expect(described_class.new(data).to_h).to eq(data)
@@ -52,7 +52,7 @@ describe GoCardlessPro::Resources::CreditorBankAccount do
52
52
  }
53
53
  end
54
54
 
55
- it "can be initialized from an uneveloped response" do
55
+ it "can be initialized from an unenveloped response" do
56
56
  resource = described_class.new(data)
57
57
 
58
58
 
@@ -99,6 +99,18 @@ describe GoCardlessPro::Resources::CreditorBankAccount do
99
99
 
100
100
  end
101
101
 
102
+ it "can handle new attributes without erroring" do
103
+ data["foo"] = "bar"
104
+ expect { described_class.new(data) }.to_not raise_error
105
+ end
106
+
107
+
108
+ it "can handle new link attributes without erroring" do
109
+ data["links"]["foo"] = "bar"
110
+ expect { described_class.new(data) }.to_not raise_error
111
+ end
112
+
113
+
102
114
  describe "#to_h" do
103
115
  it "returns a hash representing the resource" do
104
116
  expect(described_class.new(data).to_h).to eq(data)
@@ -58,7 +58,7 @@ describe GoCardlessPro::Resources::Creditor do
58
58
  }
59
59
  end
60
60
 
61
- it "can be initialized from an uneveloped response" do
61
+ it "can be initialized from an unenveloped response" do
62
62
  resource = described_class.new(data)
63
63
 
64
64
 
@@ -111,6 +111,18 @@ describe GoCardlessPro::Resources::Creditor do
111
111
 
112
112
  end
113
113
 
114
+ it "can handle new attributes without erroring" do
115
+ data["foo"] = "bar"
116
+ expect { described_class.new(data) }.to_not raise_error
117
+ end
118
+
119
+
120
+ it "can handle new link attributes without erroring" do
121
+ data["links"]["foo"] = "bar"
122
+ expect { described_class.new(data) }.to_not raise_error
123
+ end
124
+
125
+
114
126
  describe "#to_h" do
115
127
  it "returns a hash representing the resource" do
116
128
  expect(described_class.new(data).to_h).to eq(data)
@@ -52,7 +52,7 @@ describe GoCardlessPro::Resources::CustomerBankAccount do
52
52
  }
53
53
  end
54
54
 
55
- it "can be initialized from an uneveloped response" do
55
+ it "can be initialized from an unenveloped response" do
56
56
  resource = described_class.new(data)
57
57
 
58
58
 
@@ -99,6 +99,18 @@ describe GoCardlessPro::Resources::CustomerBankAccount do
99
99
 
100
100
  end
101
101
 
102
+ it "can handle new attributes without erroring" do
103
+ data["foo"] = "bar"
104
+ expect { described_class.new(data) }.to_not raise_error
105
+ end
106
+
107
+
108
+ it "can handle new link attributes without erroring" do
109
+ data["links"]["foo"] = "bar"
110
+ expect { described_class.new(data) }.to_not raise_error
111
+ end
112
+
113
+
102
114
  describe "#to_h" do
103
115
  it "returns a hash representing the resource" do
104
116
  expect(described_class.new(data).to_h).to eq(data)