adyen-ruby-api-library 11.2.0 → 11.3.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 (131) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/workflows/codeql.yml +4 -4
  4. data/.github/workflows/release.yml +1 -1
  5. data/.github/workflows/ruby.yml +1 -1
  6. data/.github/workflows/rubygems_release.yml +1 -1
  7. data/.github/workflows/stale.yml +1 -1
  8. data/VERSION +1 -1
  9. data/lib/adyen/client.rb +4 -5
  10. data/lib/adyen/services/balanceControl/balance_control_api.rb +1 -3
  11. data/lib/adyen/services/balancePlatform/account_holders_api.rb +14 -18
  12. data/lib/adyen/services/balancePlatform/authorized_card_users_api.rb +4 -12
  13. data/lib/adyen/services/balancePlatform/balance_accounts_api.rb +10 -30
  14. data/lib/adyen/services/balancePlatform/balances_api.rb +5 -15
  15. data/lib/adyen/services/balancePlatform/bank_account_validation_api.rb +1 -3
  16. data/lib/adyen/services/balancePlatform/card_orders_api.rb +2 -6
  17. data/lib/adyen/services/balancePlatform/direct_debit_mandates_api.rb +48 -0
  18. data/lib/adyen/services/balancePlatform/grant_accounts_api.rb +1 -3
  19. data/lib/adyen/services/balancePlatform/grant_offers_api.rb +2 -6
  20. data/lib/adyen/services/balancePlatform/manage_card_pin_api.rb +3 -9
  21. data/lib/adyen/services/balancePlatform/manage_sca_devices_api.rb +6 -18
  22. data/lib/adyen/services/balancePlatform/network_tokens_api.rb +2 -6
  23. data/lib/adyen/services/balancePlatform/payment_instrument_groups_api.rb +3 -9
  24. data/lib/adyen/services/balancePlatform/payment_instruments_api.rb +9 -27
  25. data/lib/adyen/services/balancePlatform/platform_api.rb +3 -9
  26. data/lib/adyen/services/balancePlatform/sca_association_management_api.rb +3 -9
  27. data/lib/adyen/services/balancePlatform/sca_device_management_api.rb +3 -9
  28. data/lib/adyen/services/balancePlatform/transaction_rules_api.rb +4 -12
  29. data/lib/adyen/services/balancePlatform/transfer_limits_balance_account_level_api.rb +6 -18
  30. data/lib/adyen/services/balancePlatform/transfer_limits_balance_platform_level_api.rb +4 -12
  31. data/lib/adyen/services/balancePlatform/transfer_routes_api.rb +1 -3
  32. data/lib/adyen/services/balancePlatform.rb +5 -0
  33. data/lib/adyen/services/binLookup/bin_lookup_api.rb +2 -6
  34. data/lib/adyen/services/capital/dynamic_offers_api.rb +40 -0
  35. data/lib/adyen/services/capital/grant_accounts_api.rb +1 -3
  36. data/lib/adyen/services/capital/grant_offers_api.rb +4 -8
  37. data/lib/adyen/services/capital/grants_api.rb +6 -18
  38. data/lib/adyen/services/capital.rb +5 -0
  39. data/lib/adyen/services/checkout/donations_api.rb +2 -6
  40. data/lib/adyen/services/checkout/modifications_api.rb +6 -18
  41. data/lib/adyen/services/checkout/orders_api.rb +3 -9
  42. data/lib/adyen/services/checkout/payment_links_api.rb +3 -9
  43. data/lib/adyen/services/checkout/payments_api.rb +6 -18
  44. data/lib/adyen/services/checkout/recurring_api.rb +4 -12
  45. data/lib/adyen/services/checkout/utility_api.rb +4 -12
  46. data/lib/adyen/services/dataProtection/data_protection_api.rb +1 -3
  47. data/lib/adyen/services/disputes/disputes_api.rb +5 -15
  48. data/lib/adyen/services/legalEntityManagement/business_lines_api.rb +4 -12
  49. data/lib/adyen/services/legalEntityManagement/documents_api.rb +4 -12
  50. data/lib/adyen/services/legalEntityManagement/hosted_onboarding_api.rb +3 -9
  51. data/lib/adyen/services/legalEntityManagement/legal_entities_api.rb +7 -21
  52. data/lib/adyen/services/legalEntityManagement/pci_questionnaires_api.rb +5 -15
  53. data/lib/adyen/services/legalEntityManagement/tax_e_delivery_consent_api.rb +2 -6
  54. data/lib/adyen/services/legalEntityManagement/terms_of_service_api.rb +5 -15
  55. data/lib/adyen/services/legalEntityManagement/transfer_instruments_api.rb +4 -12
  56. data/lib/adyen/services/management/account_company_level_api.rb +3 -9
  57. data/lib/adyen/services/management/account_merchant_level_api.rb +4 -12
  58. data/lib/adyen/services/management/account_store_level_api.rb +8 -24
  59. data/lib/adyen/services/management/allowed_origins_company_level_api.rb +4 -12
  60. data/lib/adyen/services/management/allowed_origins_merchant_level_api.rb +4 -12
  61. data/lib/adyen/services/management/android_files_company_level_api.rb +6 -18
  62. data/lib/adyen/services/management/api_credentials_company_level_api.rb +4 -12
  63. data/lib/adyen/services/management/api_credentials_merchant_level_api.rb +4 -12
  64. data/lib/adyen/services/management/api_key_company_level_api.rb +1 -3
  65. data/lib/adyen/services/management/api_key_merchant_level_api.rb +1 -3
  66. data/lib/adyen/services/management/client_key_company_level_api.rb +1 -3
  67. data/lib/adyen/services/management/client_key_merchant_level_api.rb +1 -3
  68. data/lib/adyen/services/management/my_api_credential_api.rb +6 -18
  69. data/lib/adyen/services/management/payment_methods_merchant_level_api.rb +6 -18
  70. data/lib/adyen/services/management/payout_settings_merchant_level_api.rb +5 -15
  71. data/lib/adyen/services/management/split_configuration_merchant_level_api.rb +9 -27
  72. data/lib/adyen/services/management/terminal_actions_company_level_api.rb +2 -6
  73. data/lib/adyen/services/management/terminal_actions_terminal_level_api.rb +1 -3
  74. data/lib/adyen/services/management/terminal_orders_company_level_api.rb +10 -30
  75. data/lib/adyen/services/management/terminal_orders_merchant_level_api.rb +10 -30
  76. data/lib/adyen/services/management/terminal_settings_company_level_api.rb +4 -12
  77. data/lib/adyen/services/management/terminal_settings_merchant_level_api.rb +4 -12
  78. data/lib/adyen/services/management/terminal_settings_store_level_api.rb +8 -24
  79. data/lib/adyen/services/management/terminal_settings_terminal_level_api.rb +4 -12
  80. data/lib/adyen/services/management/terminals_terminal_level_api.rb +2 -6
  81. data/lib/adyen/services/management/users_company_level_api.rb +4 -12
  82. data/lib/adyen/services/management/users_merchant_level_api.rb +4 -12
  83. data/lib/adyen/services/management/webhooks_company_level_api.rb +7 -21
  84. data/lib/adyen/services/management/webhooks_merchant_level_api.rb +7 -21
  85. data/lib/adyen/services/payment/modifications_api.rb +8 -24
  86. data/lib/adyen/services/payment/payments_api.rb +5 -15
  87. data/lib/adyen/services/paymentsApp/payments_app_api.rb +5 -15
  88. data/lib/adyen/services/payout/initialization_api.rb +3 -9
  89. data/lib/adyen/services/payout/instant_payouts_api.rb +1 -3
  90. data/lib/adyen/services/payout/reviewing_api.rb +2 -6
  91. data/lib/adyen/services/posMobile/pos_mobile_api.rb +1 -3
  92. data/lib/adyen/services/recurring/recurring_api.rb +6 -18
  93. data/lib/adyen/services/service.rb +10 -2
  94. data/lib/adyen/services/sessionAuthentication/session_authentication_api.rb +1 -3
  95. data/lib/adyen/services/storedValue/stored_value_api.rb +6 -18
  96. data/lib/adyen/services/transfers/capital_api.rb +3 -9
  97. data/lib/adyen/services/transfers/transactions_api.rb +2 -6
  98. data/lib/adyen/services/transfers/transfers_api.rb +6 -18
  99. data/lib/adyen/utils/hmac_validator.rb +0 -1
  100. data/lib/adyen/version.rb +1 -1
  101. data/sdk-generation-log/balancecontrol.json +8 -0
  102. data/sdk-generation-log/balanceplatform.json +8 -0
  103. data/sdk-generation-log/binlookup.json +8 -0
  104. data/sdk-generation-log/capital.json +8 -0
  105. data/sdk-generation-log/checkout.json +8 -0
  106. data/sdk-generation-log/dataprotection.json +8 -0
  107. data/sdk-generation-log/disputes.json +8 -0
  108. data/sdk-generation-log/legalentitymanagement.json +8 -0
  109. data/sdk-generation-log/management.json +8 -0
  110. data/sdk-generation-log/payment.json +8 -0
  111. data/sdk-generation-log/paymentsapp.json +8 -0
  112. data/sdk-generation-log/payout.json +8 -0
  113. data/sdk-generation-log/posmobile.json +8 -0
  114. data/sdk-generation-log/recurring.json +8 -0
  115. data/sdk-generation-log/sessionauthentication.json +8 -0
  116. data/sdk-generation-log/storedvalue.json +8 -0
  117. data/sdk-generation-log/transfers.json +8 -0
  118. data/spec/balance_platform_spec.rb +111 -0
  119. data/spec/capital_spec.rb +82 -0
  120. data/spec/client_spec.rb +22 -0
  121. data/spec/mocks/requests/BalancePlatform/update_mandate.json +14 -0
  122. data/spec/mocks/responses/BalancePlatform/get_list_of_mandates.json +19 -0
  123. data/spec/mocks/responses/BalancePlatform/get_mandate_by_id.json +14 -0
  124. data/spec/mocks/responses/BalancePlatform/get_tax_form_summary.json +17 -0
  125. data/spec/mocks/responses/Capital/calculate-preliminary-offer-from-dynamic-offer.json +16 -0
  126. data/spec/mocks/responses/Capital/create-static-offer-from-dynamic-offer.json +9 -0
  127. data/spec/mocks/responses/Capital/get-all-dynamic-offers.json +18 -0
  128. data/spec/service_spec.rb +40 -0
  129. data/templates/api-small.mustache +1 -3
  130. data/templates/api.mustache +1 -3
  131. metadata +27 -1
@@ -27,8 +27,16 @@ module Adyen
27
27
  end
28
28
 
29
29
  # create query parameter from a hash
30
- def create_query_string(arr)
31
- "?#{URI.encode_www_form(arr)}"
30
+ def create_query_string(params)
31
+ return '' if params.empty?
32
+ "?#{URI.encode_www_form(params)}"
33
+ end
34
+
35
+ private
36
+
37
+ def build_endpoint(path, *params)
38
+ endpoint = path.gsub('%', '%%').gsub(/{.+?}/, '%s').delete_prefix('/')
39
+ format(endpoint, *params)
32
40
  end
33
41
  end
34
42
  end
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Create a session token
16
16
  def create_authentication_session(request, headers: {})
17
- endpoint = '/sessions'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/sessions')
20
18
 
21
19
  action = { method: 'post', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Changes the status of the payment method.
16
16
  def change_status(request, headers: {})
17
- endpoint = '/changeStatus'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/changeStatus')
20
18
 
21
19
  action = { method: 'post', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -24,9 +22,7 @@ module Adyen
24
22
 
25
23
  # Checks the balance.
26
24
  def check_balance(request, headers: {})
27
- endpoint = '/checkBalance'.gsub(/{.+?}/, '%s')
28
- endpoint = endpoint.gsub(%r{^/}, '')
29
- endpoint = format(endpoint)
25
+ endpoint = build_endpoint('/checkBalance')
30
26
 
31
27
  action = { method: 'post', url: endpoint }
32
28
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -34,9 +30,7 @@ module Adyen
34
30
 
35
31
  # Issues a new card.
36
32
  def issue(request, headers: {})
37
- endpoint = '/issue'.gsub(/{.+?}/, '%s')
38
- endpoint = endpoint.gsub(%r{^/}, '')
39
- endpoint = format(endpoint)
33
+ endpoint = build_endpoint('/issue')
40
34
 
41
35
  action = { method: 'post', url: endpoint }
42
36
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -44,9 +38,7 @@ module Adyen
44
38
 
45
39
  # Loads the payment method.
46
40
  def load(request, headers: {})
47
- endpoint = '/load'.gsub(/{.+?}/, '%s')
48
- endpoint = endpoint.gsub(%r{^/}, '')
49
- endpoint = format(endpoint)
41
+ endpoint = build_endpoint('/load')
50
42
 
51
43
  action = { method: 'post', url: endpoint }
52
44
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -54,9 +46,7 @@ module Adyen
54
46
 
55
47
  # Merge the balance of two cards.
56
48
  def merge_balance(request, headers: {})
57
- endpoint = '/mergeBalance'.gsub(/{.+?}/, '%s')
58
- endpoint = endpoint.gsub(%r{^/}, '')
59
- endpoint = format(endpoint)
49
+ endpoint = build_endpoint('/mergeBalance')
60
50
 
61
51
  action = { method: 'post', url: endpoint }
62
52
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -64,9 +54,7 @@ module Adyen
64
54
 
65
55
  # Voids a transaction.
66
56
  def void_transaction(request, headers: {})
67
- endpoint = '/voidTransaction'.gsub(/{.+?}/, '%s')
68
- endpoint = endpoint.gsub(%r{^/}, '')
69
- endpoint = format(endpoint)
57
+ endpoint = build_endpoint('/voidTransaction')
70
58
 
71
59
  action = { method: 'post', url: endpoint }
72
60
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -17,9 +17,7 @@ module Adyen
17
17
  # Deprecated since Transfers API v4
18
18
  # Use the `/grants` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/get/grants) instead.
19
19
  def get_capital_account(headers: {}, query_params: {})
20
- endpoint = '/grants'.gsub(/{.+?}/, '%s')
21
- endpoint = endpoint.gsub(%r{^/}, '')
22
- endpoint = format(endpoint)
20
+ endpoint = build_endpoint('/grants')
23
21
  endpoint += create_query_string(query_params)
24
22
  action = { method: 'get', url: endpoint }
25
23
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -30,9 +28,7 @@ module Adyen
30
28
  # Deprecated since Transfers API v4
31
29
  # Use the `/grants/{grantId}` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/get/grants/(grantId)) instead.
32
30
  def get_grant_reference_details(id, headers: {})
33
- endpoint = '/grants/{id}'.gsub(/{.+?}/, '%s')
34
- endpoint = endpoint.gsub(%r{^/}, '')
35
- endpoint = format(endpoint, id)
31
+ endpoint = build_endpoint('/grants/{id}', id)
36
32
 
37
33
  action = { method: 'get', url: endpoint }
38
34
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -43,9 +39,7 @@ module Adyen
43
39
  # Deprecated since Transfers API v4
44
40
  # Use the `/grants` endpoint from the [Capital API](https://docs.adyen.com/api-explorer/capital/latest/post/grants) instead.
45
41
  def request_grant_payout(request, headers: {})
46
- endpoint = '/grants'.gsub(/{.+?}/, '%s')
47
- endpoint = endpoint.gsub(%r{^/}, '')
48
- endpoint = format(endpoint)
42
+ endpoint = build_endpoint('/grants')
49
43
 
50
44
  action = { method: 'post', url: endpoint }
51
45
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Get all transactions
16
16
  def get_all_transactions(headers: {}, query_params: {})
17
- endpoint = '/transactions'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/transactions')
20
18
  endpoint += create_query_string(query_params)
21
19
  action = { method: 'get', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -24,9 +22,7 @@ module Adyen
24
22
 
25
23
  # Get a transaction
26
24
  def get_transaction(id, headers: {})
27
- endpoint = '/transactions/{id}'.gsub(/{.+?}/, '%s')
28
- endpoint = endpoint.gsub(%r{^/}, '')
29
- endpoint = format(endpoint, id)
25
+ endpoint = build_endpoint('/transactions/{id}', id)
30
26
 
31
27
  action = { method: 'get', url: endpoint }
32
28
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -14,9 +14,7 @@ module Adyen
14
14
 
15
15
  # Approve initiated transfers
16
16
  def approve_initiated_transfers(request, headers: {})
17
- endpoint = '/transfers/approve'.gsub(/{.+?}/, '%s')
18
- endpoint = endpoint.gsub(%r{^/}, '')
19
- endpoint = format(endpoint)
17
+ endpoint = build_endpoint('/transfers/approve')
20
18
 
21
19
  action = { method: 'post', url: endpoint }
22
20
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -24,9 +22,7 @@ module Adyen
24
22
 
25
23
  # Cancel initiated transfers
26
24
  def cancel_initiated_transfers(request, headers: {})
27
- endpoint = '/transfers/cancel'.gsub(/{.+?}/, '%s')
28
- endpoint = endpoint.gsub(%r{^/}, '')
29
- endpoint = format(endpoint)
25
+ endpoint = build_endpoint('/transfers/cancel')
30
26
 
31
27
  action = { method: 'post', url: endpoint }
32
28
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -34,9 +30,7 @@ module Adyen
34
30
 
35
31
  # Get all transfers
36
32
  def get_all_transfers(headers: {}, query_params: {})
37
- endpoint = '/transfers'.gsub(/{.+?}/, '%s')
38
- endpoint = endpoint.gsub(%r{^/}, '')
39
- endpoint = format(endpoint)
33
+ endpoint = build_endpoint('/transfers')
40
34
  endpoint += create_query_string(query_params)
41
35
  action = { method: 'get', url: endpoint }
42
36
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -44,9 +38,7 @@ module Adyen
44
38
 
45
39
  # Get a transfer
46
40
  def get_transfer(id, headers: {})
47
- endpoint = '/transfers/{id}'.gsub(/{.+?}/, '%s')
48
- endpoint = endpoint.gsub(%r{^/}, '')
49
- endpoint = format(endpoint, id)
41
+ endpoint = build_endpoint('/transfers/{id}', id)
50
42
 
51
43
  action = { method: 'get', url: endpoint }
52
44
  @client.call_adyen_api(@service, action, {}, headers, @version)
@@ -54,9 +46,7 @@ module Adyen
54
46
 
55
47
  # Return a transfer
56
48
  def return_transfer(request, transfer_id, headers: {})
57
- endpoint = '/transfers/{transferId}/returns'.gsub(/{.+?}/, '%s')
58
- endpoint = endpoint.gsub(%r{^/}, '')
59
- endpoint = format(endpoint, transfer_id)
49
+ endpoint = build_endpoint('/transfers/{transferId}/returns', transfer_id)
60
50
 
61
51
  action = { method: 'post', url: endpoint }
62
52
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -64,9 +54,7 @@ module Adyen
64
54
 
65
55
  # Transfer funds
66
56
  def transfer_funds(request, headers: {})
67
- endpoint = '/transfers'.gsub(/{.+?}/, '%s')
68
- endpoint = endpoint.gsub(%r{^/}, '')
69
- endpoint = format(endpoint)
57
+ endpoint = build_endpoint('/transfers')
70
58
 
71
59
  action = { method: 'post', url: endpoint }
72
60
  @client.call_adyen_api(@service, action, request, headers, @version)
@@ -38,7 +38,6 @@ module Adyen
38
38
  # @return [Boolean] Returns true if the HMAC signature is valid, otherwise false.
39
39
  def valid_webhook_payload_hmac?(hmac_signature, hmac_key, payload)
40
40
  expected_sign = calculate_webhook_payload_hmac(payload, hmac_key)
41
- puts(expected_sign)
42
41
  expected_sign == hmac_signature
43
42
  end
44
43
 
data/lib/adyen/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Adyen
2
2
  NAME = 'adyen-ruby-api-library'.freeze
3
- VERSION = '11.2.0'.freeze
3
+ VERSION = '11.3.0'.freeze
4
4
  end
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "balancecontrol",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:52Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "balanceplatform",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:40:00Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "binlookup",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:47Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "capital",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:47Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "checkout",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:49Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "dataprotection",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:47Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "disputes",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:52Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "legalentitymanagement",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:46Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "management",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:49Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "payment",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:48Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "paymentsapp",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:40:00Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "payout",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:45Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "posmobile",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:47Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "recurring",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:48Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "sessionauthentication",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:49Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "storedvalue",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:48Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "service": "transfers",
3
+ "project": "ruby",
4
+ "generatedAt": "2026-04-20T13:39:51Z",
5
+ "openapiCommitSha": "3550ecd3f320efaad6bee55ffed5122cb9ba09d5",
6
+ "automationCommitSha": "4ad0c0c7e87bc0e5994a9a3350a991d0691350bb",
7
+ "libraryCommitSha": "60ccdbdbbb7069d54600a8a8cd19eea245661134"
8
+ }
@@ -384,6 +384,117 @@ RSpec.describe Adyen::BalancePlatform, service: 'balancePlatform' do
384
384
  expect(response_hash).to be_a_kind_of Hash
385
385
  end
386
386
 
387
+ it 'makes a get_tax_form_summary GET call' do
388
+ response_body = json_from_file('mocks/responses/BalancePlatform/get_tax_form_summary.json')
389
+ account_holder_id = 'AH3227C223222C5GKR23686TF'
390
+
391
+ url = @shared_values[:client].service_url(
392
+ @shared_values[:service],
393
+ "accountHolders/#{account_holder_id}/taxFormSummary",
394
+ @shared_values[:client].balance_platform.version
395
+ )
396
+ WebMock.stub_request(:get, url)
397
+ .with(headers: { 'x-api-key' => @shared_values[:client].api_key })
398
+ .to_return(body: response_body)
399
+
400
+ result = @shared_values[:client].balance_platform.account_holders_api
401
+ .get_tax_form_summary(account_holder_id)
402
+ response_hash = result.response
403
+
404
+ expect(result.status).to eq(200)
405
+ expect(response_hash).to eq(JSON.parse(response_body))
406
+ expect(response_hash).to be_a Adyen::HashWithAccessors
407
+ expect(response_hash).to be_a_kind_of Hash
408
+ end
409
+
410
+ ## directDebitMandates
411
+ it 'makes a get_list_of_mandates GET call' do
412
+ response_body = json_from_file('mocks/responses/BalancePlatform/get_list_of_mandates.json')
413
+
414
+ url = @shared_values[:client].service_url(
415
+ @shared_values[:service],
416
+ 'mandates',
417
+ @shared_values[:client].balance_platform.version
418
+ )
419
+ WebMock.stub_request(:get, url)
420
+ .with(headers: { 'x-api-key' => @shared_values[:client].api_key })
421
+ .to_return(body: response_body)
422
+
423
+ result = @shared_values[:client].balance_platform.direct_debit_mandates_api.get_list_of_mandates
424
+ response_hash = result.response
425
+
426
+ expect(result.status).to eq(200)
427
+ expect(response_hash).to eq(JSON.parse(response_body))
428
+ expect(response_hash).to be_a Adyen::HashWithAccessors
429
+ expect(response_hash).to be_a_kind_of Hash
430
+ end
431
+
432
+ it 'makes a get_mandate_by_id GET call' do
433
+ response_body = json_from_file('mocks/responses/BalancePlatform/get_mandate_by_id.json')
434
+ mandate_id = 'MNDT7QXPLKT9R333640TX334709E'
435
+
436
+ url = @shared_values[:client].service_url(
437
+ @shared_values[:service],
438
+ "mandates/#{mandate_id}",
439
+ @shared_values[:client].balance_platform.version
440
+ )
441
+ WebMock.stub_request(:get, url)
442
+ .with(headers: { 'x-api-key' => @shared_values[:client].api_key })
443
+ .to_return(body: response_body)
444
+
445
+ result = @shared_values[:client].balance_platform.direct_debit_mandates_api.get_mandate_by_id(mandate_id)
446
+ response_hash = result.response
447
+
448
+ expect(result.status).to eq(200)
449
+ expect(response_hash).to eq(JSON.parse(response_body))
450
+ expect(response_hash).to be_a Adyen::HashWithAccessors
451
+ expect(response_hash).to be_a_kind_of Hash
452
+ end
453
+
454
+ it 'makes a cancel_mandate POST call' do
455
+ mandate_id = 'MNDT7QXPLKT9R333640TX334709E'
456
+
457
+ url = @shared_values[:client].service_url(
458
+ @shared_values[:service],
459
+ "mandates/#{mandate_id}/cancel",
460
+ @shared_values[:client].balance_platform.version
461
+ )
462
+ WebMock.stub_request(:post, url)
463
+ .with(headers: { 'x-api-key' => @shared_values[:client].api_key })
464
+ .to_return(status: 202, body: '')
465
+
466
+ result = @shared_values[:client].balance_platform.direct_debit_mandates_api.cancel_mandate(mandate_id)
467
+
468
+ expect(result.status).to eq(202)
469
+ end
470
+
471
+ it 'makes an update_mandate PATCH call' do
472
+ request_body = JSON.parse(json_from_file('mocks/requests/BalancePlatform/update_mandate.json'))
473
+ response_body = json_from_file('mocks/responses/BalancePlatform/get_mandate_by_id.json')
474
+ mandate_id = 'MNDT7QXPLKT9R333640TX334709E'
475
+
476
+ url = @shared_values[:client].service_url(
477
+ @shared_values[:service],
478
+ "mandates/#{mandate_id}",
479
+ @shared_values[:client].balance_platform.version
480
+ )
481
+ WebMock.stub_request(:patch, url)
482
+ .with(
483
+ body: request_body,
484
+ headers: { 'x-api-key' => @shared_values[:client].api_key }
485
+ )
486
+ .to_return(body: response_body)
487
+
488
+ result = @shared_values[:client].balance_platform.direct_debit_mandates_api
489
+ .update_mandate(request_body, mandate_id)
490
+ response_hash = result.response
491
+
492
+ expect(result.status).to eq(200)
493
+ expect(response_hash).to eq(JSON.parse(response_body))
494
+ expect(response_hash).to be_a Adyen::HashWithAccessors
495
+ expect(response_hash).to be_a_kind_of Hash
496
+ end
497
+
387
498
  ## authorisedCardUsers
388
499
  it 'makes a get_all_authorised_card_users GET call' do
389
500
  response_body = json_from_file('mocks/responses/BalancePlatform/get_all_authorised_card_users.json')
data/spec/capital_spec.rb CHANGED
@@ -6,6 +6,88 @@ RSpec.describe Adyen::Capital do
6
6
  let(:service) { 'Capital' }
7
7
  let(:version) { client.capital.version }
8
8
 
9
+ describe 'DynamicOffersApi' do
10
+ let(:dynamic_offer_id) { 'DO00000000000000000000001' }
11
+
12
+ it 'calculates a preliminary offer from a dynamic offer' do
13
+ response_body = json_from_file('mocks/responses/Capital/calculate-preliminary-offer-from-dynamic-offer.json')
14
+ request_payload = { "amount" => { "currency" => "EUR", "value" => 10000 } }
15
+
16
+ url = client.service_url(service, "dynamicOffers/#{dynamic_offer_id}/calculate", version)
17
+
18
+ WebMock.stub_request(:post, url)
19
+ .with(
20
+ body: request_payload,
21
+ headers: { 'x-api-key' => client.api_key }
22
+ )
23
+ .to_return(body: response_body)
24
+
25
+ result = client.capital.dynamic_offers_api.calculate_preliminary_offer_from_dynamic_offer(request_payload, dynamic_offer_id)
26
+
27
+ expect(result.status).to eq(200)
28
+ expect(result.response).to eq(JSON.parse(response_body))
29
+ expect(result.response).to be_a(Adyen::HashWithAccessors)
30
+ expect(result.response['id']).to eq(dynamic_offer_id)
31
+ end
32
+
33
+ it 'creates a static offer from a dynamic offer' do
34
+ response_body = json_from_file('mocks/responses/Capital/create-static-offer-from-dynamic-offer.json')
35
+ request_payload = { "amount" => { "currency" => "EUR", "value" => 10000 } }
36
+
37
+ url = client.service_url(service, "dynamicOffers/#{dynamic_offer_id}/grantOffer", version)
38
+
39
+ WebMock.stub_request(:post, url)
40
+ .with(
41
+ body: request_payload,
42
+ headers: { 'x-api-key' => client.api_key }
43
+ )
44
+ .to_return(body: response_body)
45
+
46
+ result = client.capital.dynamic_offers_api.create_static_offer_from_dynamic_offer(request_payload, dynamic_offer_id)
47
+
48
+ expect(result.status).to eq(200)
49
+ expect(result.response).to eq(JSON.parse(response_body))
50
+ expect(result.response).to be_a(Adyen::HashWithAccessors)
51
+ expect(result.response['id']).to eq('GO00000000000000000000002')
52
+ end
53
+
54
+ it 'gets all dynamic offers' do
55
+ response_body = json_from_file('mocks/responses/Capital/get-all-dynamic-offers.json')
56
+
57
+ url = client.service_url(service, 'dynamicOffers', version)
58
+
59
+ WebMock.stub_request(:get, url)
60
+ .with(headers: { 'x-api-key' => client.api_key })
61
+ .to_return(body: response_body)
62
+
63
+ result = client.capital.dynamic_offers_api.get_all_dynamic_offers
64
+
65
+ expect(result.status).to eq(200)
66
+ expect(result.response).to eq(JSON.parse(response_body))
67
+ expect(result.response).to be_a(Adyen::HashWithAccessors)
68
+ expect(result.response['dynamicOffers'].first['id']).to eq(dynamic_offer_id)
69
+ end
70
+
71
+ it 'gets all dynamic offers with query params' do
72
+ response_body = json_from_file('mocks/responses/Capital/get-all-dynamic-offers.json')
73
+ account_holder_id = 'AH00000000000000000000001'
74
+
75
+ url = client.service_url(service, 'dynamicOffers', version)
76
+
77
+ WebMock.stub_request(:get, url)
78
+ .with(
79
+ query: { 'accountHolderId' => account_holder_id },
80
+ headers: { 'x-api-key' => client.api_key }
81
+ )
82
+ .to_return(body: response_body)
83
+
84
+ result = client.capital.dynamic_offers_api.get_all_dynamic_offers(query_params: { 'accountHolderId' => account_holder_id })
85
+
86
+ expect(result.status).to eq(200)
87
+ expect(result.response).to eq(JSON.parse(response_body))
88
+ end
89
+ end
90
+
9
91
  describe 'GrantAccountsApi' do
10
92
  it 'gets grant account information' do
11
93
  response_body = json_from_file('mocks/responses/Capital/get-grant-account-success.json')
data/spec/client_spec.rb CHANGED
@@ -18,6 +18,28 @@ RSpec.describe Adyen do
18
18
  .to eq(:test)
19
19
  end
20
20
 
21
+ it 'raises ArgumentError when initialized with an invalid env string' do
22
+ expect { Adyen::Client.new(env: 'live') }
23
+ .to raise_error(ArgumentError)
24
+ end
25
+
26
+ it 'raises ArgumentError when initialized with an invalid env value' do
27
+ expect { Adyen::Client.new(env: :invalid) }
28
+ .to raise_error(ArgumentError)
29
+ end
30
+
31
+ it 'strips https:// from live_url_prefix when passed via constructor' do
32
+ client = Adyen::Client.new(env: :live, live_url_prefix: 'https://myprefix')
33
+ expect(client.service_url_base('Payment'))
34
+ .to eq('https://myprefix-pal-live.adyenpayments.com/pal/servlet/Payment')
35
+ end
36
+
37
+ it 'does not mutate the original live_url_prefix string' do
38
+ prefix = 'https://myprefix'
39
+ Adyen::Client.new(env: :live, live_url_prefix: prefix)
40
+ expect(prefix).to eq('https://myprefix')
41
+ end
42
+
21
43
  it 'sets the version number' do
22
44
  @shared_values[:client].checkout.version = @shared_values[:version]
23
45
  expect(@shared_values[:client].checkout.version)
@@ -0,0 +1,14 @@
1
+ {
2
+ "id": "MNDT7QXPLKT9R333640TX334709E",
3
+ "type": "bacs",
4
+ "balanceAccountId": "BA43EKD334339T6N8X655DW77",
5
+ "paymentInstrumentId": "PI43EKK334339T6N8X65688CS",
6
+ "status": "approved",
7
+ "counterparty": {
8
+ "accountHolder": {
9
+ "fullName": "Example Merchant Ltd"
10
+ }
11
+ },
12
+ "createdAt": "2026-02-23T13:04:15.683Z",
13
+ "updatedAt": "2026-02-23T13:04:15.683Z"
14
+ }