gocardless_pro 4.3.0 → 4.5.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 (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -0
  3. data/lib/gocardless_pro/client.rb +11 -1
  4. data/lib/gocardless_pro/list_response.rb +2 -2
  5. data/lib/gocardless_pro/resources/billing_request.rb +7 -8
  6. data/lib/gocardless_pro/resources/billing_request_with_action.rb +4 -4
  7. data/lib/gocardless_pro/resources/block.rb +4 -6
  8. data/lib/gocardless_pro/resources/creditor.rb +6 -4
  9. data/lib/gocardless_pro/resources/creditor_bank_account.rb +6 -5
  10. data/lib/gocardless_pro/resources/customer.rb +4 -3
  11. data/lib/gocardless_pro/resources/customer_bank_account.rb +13 -8
  12. data/lib/gocardless_pro/resources/customer_notification.rb +3 -4
  13. data/lib/gocardless_pro/resources/event.rb +13 -2
  14. data/lib/gocardless_pro/resources/export.rb +2 -0
  15. data/lib/gocardless_pro/resources/instalment_schedule.rb +0 -1
  16. data/lib/gocardless_pro/resources/institution.rb +5 -3
  17. data/lib/gocardless_pro/resources/logo.rb +2 -1
  18. data/lib/gocardless_pro/resources/mandate.rb +7 -4
  19. data/lib/gocardless_pro/resources/mandate_import.rb +25 -21
  20. data/lib/gocardless_pro/resources/mandate_import_entry.rb +13 -16
  21. data/lib/gocardless_pro/resources/mandate_pdf.rb +3 -3
  22. data/lib/gocardless_pro/resources/negative_balance_limit.rb +0 -1
  23. data/lib/gocardless_pro/resources/outbound_payment.rb +12 -5
  24. data/lib/gocardless_pro/resources/outbound_payment_import.rb +81 -0
  25. data/lib/gocardless_pro/resources/outbound_payment_import_entry.rb +77 -0
  26. data/lib/gocardless_pro/resources/payer_authorisation.rb +30 -34
  27. data/lib/gocardless_pro/resources/payment.rb +11 -6
  28. data/lib/gocardless_pro/resources/payment_account.rb +2 -1
  29. data/lib/gocardless_pro/resources/payment_account_transaction.rb +2 -1
  30. data/lib/gocardless_pro/resources/payout.rb +7 -6
  31. data/lib/gocardless_pro/resources/payout_item.rb +1 -2
  32. data/lib/gocardless_pro/resources/redirect_flow.rb +34 -23
  33. data/lib/gocardless_pro/resources/refund.rb +8 -6
  34. data/lib/gocardless_pro/resources/scheme_identifier.rb +0 -1
  35. data/lib/gocardless_pro/resources/subscription.rb +17 -14
  36. data/lib/gocardless_pro/resources/tax_rate.rb +2 -2
  37. data/lib/gocardless_pro/resources/verification_detail.rb +10 -6
  38. data/lib/gocardless_pro/services/balances_service.rb +11 -3
  39. data/lib/gocardless_pro/services/bank_account_details_service.rb +10 -4
  40. data/lib/gocardless_pro/services/bank_account_holder_verifications_service.rb +10 -4
  41. data/lib/gocardless_pro/services/bank_authorisations_service.rb +7 -1
  42. data/lib/gocardless_pro/services/bank_details_lookups_service.rb +23 -11
  43. data/lib/gocardless_pro/services/billing_request_flows_service.rb +7 -1
  44. data/lib/gocardless_pro/services/billing_request_templates_service.rb +10 -3
  45. data/lib/gocardless_pro/services/billing_request_with_actions_service.rb +7 -1
  46. data/lib/gocardless_pro/services/billing_requests_service.rb +25 -16
  47. data/lib/gocardless_pro/services/blocks_service.rb +10 -3
  48. data/lib/gocardless_pro/services/creditor_bank_accounts_service.rb +10 -3
  49. data/lib/gocardless_pro/services/creditors_service.rb +10 -3
  50. data/lib/gocardless_pro/services/currency_exchange_rates_service.rb +10 -3
  51. data/lib/gocardless_pro/services/customer_bank_accounts_service.rb +20 -10
  52. data/lib/gocardless_pro/services/customer_notifications_service.rb +7 -2
  53. data/lib/gocardless_pro/services/customers_service.rb +11 -5
  54. data/lib/gocardless_pro/services/events_service.rb +15 -3
  55. data/lib/gocardless_pro/services/exports_service.rb +7 -1
  56. data/lib/gocardless_pro/services/funds_availabilities_service.rb +7 -1
  57. data/lib/gocardless_pro/services/instalment_schedules_service.rb +15 -7
  58. data/lib/gocardless_pro/services/institutions_service.rb +7 -1
  59. data/lib/gocardless_pro/services/logos_service.rb +9 -3
  60. data/lib/gocardless_pro/services/mandate_import_entries_service.rb +10 -4
  61. data/lib/gocardless_pro/services/mandate_imports_service.rb +10 -2
  62. data/lib/gocardless_pro/services/mandate_pdfs_service.rb +11 -5
  63. data/lib/gocardless_pro/services/mandates_service.rb +16 -9
  64. data/lib/gocardless_pro/services/negative_balance_limits_service.rb +10 -3
  65. data/lib/gocardless_pro/services/outbound_payment_import_entries_service.rb +64 -0
  66. data/lib/gocardless_pro/services/outbound_payment_imports_service.rb +118 -0
  67. data/lib/gocardless_pro/services/outbound_payments_service.rb +11 -4
  68. data/lib/gocardless_pro/services/payer_authorisations_service.rb +11 -8
  69. data/lib/gocardless_pro/services/payer_themes_service.rb +7 -1
  70. data/lib/gocardless_pro/services/payment_account_transactions_service.rb +34 -7
  71. data/lib/gocardless_pro/services/payment_accounts_service.rb +10 -3
  72. data/lib/gocardless_pro/services/payments_service.rb +22 -14
  73. data/lib/gocardless_pro/services/payout_items_service.rb +12 -7
  74. data/lib/gocardless_pro/services/payouts_service.rb +12 -5
  75. data/lib/gocardless_pro/services/redirect_flows_service.rb +15 -5
  76. data/lib/gocardless_pro/services/refunds_service.rb +15 -10
  77. data/lib/gocardless_pro/services/scenario_simulators_service.rb +85 -82
  78. data/lib/gocardless_pro/services/scheme_identifiers_service.rb +13 -7
  79. data/lib/gocardless_pro/services/subscriptions_service.rb +48 -38
  80. data/lib/gocardless_pro/services/tax_rates_service.rb +10 -3
  81. data/lib/gocardless_pro/services/transferred_mandates_service.rb +7 -1
  82. data/lib/gocardless_pro/services/verification_details_service.rb +7 -1
  83. data/lib/gocardless_pro/services/webhooks_service.rb +10 -3
  84. data/lib/gocardless_pro/version.rb +1 -1
  85. data/lib/gocardless_pro/webhook.rb +45 -0
  86. data/lib/gocardless_pro.rb +6 -0
  87. metadata +15 -15
@@ -1,6 +1,18 @@
1
1
  require 'openssl'
2
2
 
3
3
  module GoCardlessPro
4
+ # Represents the result of parsing a webhook, containing both the events
5
+ # and the webhook metadata.
6
+ class WebhookParseResult
7
+ attr_reader :events
8
+ attr_reader :webhook_id
9
+
10
+ def initialize(events, webhook_id)
11
+ @events = events
12
+ @webhook_id = webhook_id
13
+ end
14
+ end
15
+
4
16
  class Webhook
5
17
  class InvalidSignatureError < StandardError; end
6
18
 
@@ -38,6 +50,39 @@ module GoCardlessPro
38
50
  events.map { |event| Resources::Event.new(event) }
39
51
  end
40
52
 
53
+ # Validates that a webhook was genuinely sent by GoCardless using
54
+ # `.signature_valid?`, and then parses it into a WebhookParseResult containing
55
+ # both the events and the webhook ID from the meta field
56
+ #
57
+ # @option options [String] :request_body the request body
58
+ # @option options [String] :signature_header the signature included in the request,
59
+ # found in the `Webhook-Signature` header
60
+ # @option options [String] :webhook_endpoint_secret the webhook endpoint secret for
61
+ # your webhook endpoint, as configured in your GoCardless Dashboard
62
+ # @return [WebhookParseResult] containing the events and webhook ID
63
+ # @raise [InvalidSignatureError] if the signature header specified does not match
64
+ # the signature computed using the request body and webhook endpoint secret
65
+ # @raise [ArgumentError] if a required keyword argument is not provided or is not
66
+ # of the required type
67
+ def parse_with_meta(options = {})
68
+ validate_options!(options)
69
+
70
+ unless signature_valid?(request_body: options[:request_body],
71
+ signature_header: options[:signature_header],
72
+ webhook_endpoint_secret: options[:webhook_endpoint_secret])
73
+ raise InvalidSignatureError, "This webhook doesn't appear to be a genuine " \
74
+ 'webhook from GoCardless, because the signature ' \
75
+ "header doesn't match the signature computed" \
76
+ ' with your webhook endpoint secret.'
77
+ end
78
+
79
+ parsed = JSON.parse(options[:request_body])
80
+ events = parsed['events'].map { |event| Resources::Event.new(event) }
81
+ webhook_id = parsed.dig('meta', 'webhook_id')
82
+
83
+ WebhookParseResult.new(events, webhook_id)
84
+ end
85
+
41
86
  # Validates that a webhook was genuinely sent by GoCardless by computing its
42
87
  # signature using the body and your webhook endpoint secret, and comparing that with
43
88
  # the signature included in the `Webhook-Signature` header
@@ -123,6 +123,12 @@ require_relative 'gocardless_pro/services/negative_balance_limits_service'
123
123
  require_relative 'gocardless_pro/resources/outbound_payment'
124
124
  require_relative 'gocardless_pro/services/outbound_payments_service'
125
125
 
126
+ require_relative 'gocardless_pro/resources/outbound_payment_import'
127
+ require_relative 'gocardless_pro/services/outbound_payment_imports_service'
128
+
129
+ require_relative 'gocardless_pro/resources/outbound_payment_import_entry'
130
+ require_relative 'gocardless_pro/services/outbound_payment_import_entries_service'
131
+
126
132
  require_relative 'gocardless_pro/resources/payer_authorisation'
127
133
  require_relative 'gocardless_pro/services/payer_authorisations_service'
128
134
 
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gocardless_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GoCardless
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-03-02 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: faraday
@@ -50,57 +49,56 @@ dependencies:
50
49
  requirements:
51
50
  - - "~>"
52
51
  - !ruby/object:Gem::Version
53
- version: 3.13.0
52
+ version: 3.13.2
54
53
  type: :development
55
54
  prerelease: false
56
55
  version_requirements: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - "~>"
59
58
  - !ruby/object:Gem::Version
60
- version: 3.13.0
59
+ version: 3.13.2
61
60
  - !ruby/object:Gem::Dependency
62
61
  name: webmock
63
62
  requirement: !ruby/object:Gem::Requirement
64
63
  requirements:
65
64
  - - "~>"
66
65
  - !ruby/object:Gem::Version
67
- version: 3.24.0
66
+ version: 3.26.2
68
67
  type: :development
69
68
  prerelease: false
70
69
  version_requirements: !ruby/object:Gem::Requirement
71
70
  requirements:
72
71
  - - "~>"
73
72
  - !ruby/object:Gem::Version
74
- version: 3.24.0
73
+ version: 3.26.2
75
74
  - !ruby/object:Gem::Dependency
76
75
  name: rubocop
77
76
  requirement: !ruby/object:Gem::Requirement
78
77
  requirements:
79
78
  - - "~>"
80
79
  - !ruby/object:Gem::Version
81
- version: 1.85.0
80
+ version: 1.89.0
82
81
  type: :development
83
82
  prerelease: false
84
83
  version_requirements: !ruby/object:Gem::Requirement
85
84
  requirements:
86
85
  - - "~>"
87
86
  - !ruby/object:Gem::Version
88
- version: 1.85.0
87
+ version: 1.89.0
89
88
  - !ruby/object:Gem::Dependency
90
89
  name: yard
91
90
  requirement: !ruby/object:Gem::Requirement
92
91
  requirements:
93
92
  - - "~>"
94
93
  - !ruby/object:Gem::Version
95
- version: 0.9.37
94
+ version: 0.9.45
96
95
  type: :development
97
96
  prerelease: false
98
97
  version_requirements: !ruby/object:Gem::Requirement
99
98
  requirements:
100
99
  - - "~>"
101
100
  - !ruby/object:Gem::Version
102
- version: 0.9.37
103
- description:
101
+ version: 0.9.45
104
102
  email:
105
103
  - engineering@gocardless.com
106
104
  executables: []
@@ -154,6 +152,8 @@ files:
154
152
  - lib/gocardless_pro/resources/mandate_pdf.rb
155
153
  - lib/gocardless_pro/resources/negative_balance_limit.rb
156
154
  - lib/gocardless_pro/resources/outbound_payment.rb
155
+ - lib/gocardless_pro/resources/outbound_payment_import.rb
156
+ - lib/gocardless_pro/resources/outbound_payment_import_entry.rb
157
157
  - lib/gocardless_pro/resources/payer_authorisation.rb
158
158
  - lib/gocardless_pro/resources/payer_theme.rb
159
159
  - lib/gocardless_pro/resources/payment.rb
@@ -199,6 +199,8 @@ files:
199
199
  - lib/gocardless_pro/services/mandate_pdfs_service.rb
200
200
  - lib/gocardless_pro/services/mandates_service.rb
201
201
  - lib/gocardless_pro/services/negative_balance_limits_service.rb
202
+ - lib/gocardless_pro/services/outbound_payment_import_entries_service.rb
203
+ - lib/gocardless_pro/services/outbound_payment_imports_service.rb
202
204
  - lib/gocardless_pro/services/outbound_payments_service.rb
203
205
  - lib/gocardless_pro/services/payer_authorisations_service.rb
204
206
  - lib/gocardless_pro/services/payer_themes_service.rb
@@ -222,7 +224,6 @@ homepage: https://github.com/gocardless/gocardless-pro-ruby
222
224
  licenses:
223
225
  - MIT
224
226
  metadata: {}
225
- post_install_message:
226
227
  rdoc_options: []
227
228
  require_paths:
228
229
  - lib
@@ -237,8 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
238
  - !ruby/object:Gem::Version
238
239
  version: '0'
239
240
  requirements: []
240
- rubygems_version: 3.4.19
241
- signing_key:
241
+ rubygems_version: 4.0.16
242
242
  specification_version: 4
243
243
  summary: A gem for calling the GoCardless API
244
244
  test_files: []