currency_cloud 4.4.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/currency_cloud.gemspec +2 -2
  3. data/lib/currency_cloud/errors/api_error.rb +16 -6
  4. data/lib/currency_cloud/session.rb +14 -1
  5. data/lib/currency_cloud/version.rb +1 -1
  6. data/lib/currency_cloud.rb +1 -1
  7. data/spec/currency_cloud_spec.rb +32 -0
  8. data/spec/integration/errors_spec.rb +23 -0
  9. data/spec/support/vcr_cassettes/Accounts/can_retrieve_account_payment_charges_settings.yml +2 -2
  10. data/spec/support/vcr_cassettes/Accounts/can_update_account_payment_charges_settings.yml +2 -2
  11. data/spec/support/vcr_cassettes/Accounts/get_compliance_settings.yml +2 -2
  12. data/spec/support/vcr_cassettes/Accounts/update_compliance_settings.yml +2 -2
  13. data/spec/support/vcr_cassettes/CollectionsScreening/can_complete_with_accepted_false.yml +2 -2
  14. data/spec/support/vcr_cassettes/CollectionsScreening/can_complete_with_accepted_true.yml +2 -2
  15. data/spec/support/vcr_cassettes/Conversions/can_cancel_conversion/with_notes/has_a_non-empty_notes_attribute.yml +3 -3
  16. data/spec/support/vcr_cassettes/Conversions/can_cancel_conversion/without_notes/has_a_empty_notes_attribute.yml +3 -3
  17. data/spec/support/vcr_cassettes/Conversions/can_cancellation_quote.yml +2 -2
  18. data/spec/support/vcr_cassettes/Conversions/can_date_change_conversion.yml +3 -3
  19. data/spec/support/vcr_cassettes/Conversions/can_retrieve_cancellation_quote.yml +3 -3
  20. data/spec/support/vcr_cassettes/Conversions/can_retrieve_date_change_quote.yml +3 -3
  21. data/spec/support/vcr_cassettes/Conversions/can_retrieve_profit_and_loss.yml +2 -2
  22. data/spec/support/vcr_cassettes/Conversions/can_split_conversion.yml +3 -3
  23. data/spec/support/vcr_cassettes/Conversions/can_split_history.yml +3 -3
  24. data/spec/support/vcr_cassettes/Conversions/can_split_preview.yml +3 -3
  25. data/spec/support/vcr_cassettes/FundingAccounts/can_find.yml +2 -2
  26. data/spec/support/vcr_cassettes/FundingAccounts/can_find_bad_request.yml +2 -2
  27. data/spec/support/vcr_cassettes/FundingAccounts/can_find_missing_currency.yml +2 -2
  28. data/spec/support/vcr_cassettes/FundingAccounts/can_find_unauthorized.yml +1 -1
  29. data/spec/support/vcr_cassettes/FundingTransactions/can_retrieve.yml +2 -2
  30. data/spec/support/vcr_cassettes/IBANs/can_IBANs_for_a_specific_subaccount.yml +2 -2
  31. data/spec/support/vcr_cassettes/IBANs/can_IBANs_for_subaccounts.yml +2 -2
  32. data/spec/support/vcr_cassettes/IBANs/can_find.yml +1 -1
  33. data/spec/support/vcr_cassettes/Payments/can_authorise/when_payment_ids_are_valid.yml +5 -5
  34. data/spec/support/vcr_cassettes/Payments/can_create.yml +3 -3
  35. data/spec/support/vcr_cassettes/Payments/can_create_bad_request.yml +2 -2
  36. data/spec/support/vcr_cassettes/Payments/can_get_the_new_submission.yml +4 -4
  37. data/spec/support/vcr_cassettes/Payments/can_retrieve_confirmation.yml +3 -3
  38. data/spec/support/vcr_cassettes/Payments/can_retrieve_payment_delivery_date.yml +2 -2
  39. data/spec/support/vcr_cassettes/Payments/can_retrieve_payment_tracking_info.yml +2 -2
  40. data/spec/support/vcr_cassettes/Payments/can_retrieve_quote_payment_fee.yml +2 -2
  41. data/spec/support/vcr_cassettes/Payments/can_validate.yml +3 -3
  42. data/spec/support/vcr_cassettes/Payments/can_validate_and_create_with_sca.yml +4 -4
  43. data/spec/support/vcr_cassettes/Quotes/can_create_a_held_rate_quote.yml +2 -2
  44. data/spec/support/vcr_cassettes/Quotes/can_create_a_quote_with_conversion_date.yml +2 -2
  45. data/spec/support/vcr_cassettes/Quotes/can_create_a_quote_with_conversion_date_preference.yml +2 -2
  46. data/spec/support/vcr_cassettes/Rates/can_provided_detailed_rate_with_conversion_date_preference.yml +1 -1
  47. data/spec/support/vcr_cassettes/Reference/can_retrieve_bank_details.yml +2 -2
  48. data/spec/support/vcr_cassettes/Reference/can_retrieve_conversion_dates.yml +2 -2
  49. data/spec/support/vcr_cassettes/Reference/can_retrieve_currencies.yml +2 -2
  50. data/spec/support/vcr_cassettes/Reference/can_retrieve_payer_required_details.yml +2 -2
  51. data/spec/support/vcr_cassettes/Reference/can_retrieve_payment_dates.yml +2 -2
  52. data/spec/support/vcr_cassettes/Reference/can_retrieve_payment_fee_rules.yml +1 -1
  53. data/spec/support/vcr_cassettes/Reference/can_retrieve_payment_purpose_codes.yml +2 -2
  54. data/spec/support/vcr_cassettes/Reference/can_retrieve_settlement_accounts.yml +2 -2
  55. data/spec/support/vcr_cassettes/Reports/can_create_payments_report.yml +2 -2
  56. data/spec/support/vcr_cassettes/Reports/can_find_report_requests.yml +2 -2
  57. data/spec/support/vcr_cassettes/Reports/can_retrieve_report_request.yml +2 -2
  58. data/spec/support/vcr_cassettes/TermsAndConditions/can_accept_terms.yml +3 -3
  59. data/spec/support/vcr_cassettes/Transactions/can_retrieve_sender_details.yml +2 -2
  60. data/spec/support/vcr_cassettes/Transfers/can_cancel.yml +3 -3
  61. data/spec/support/vcr_cassettes/Transfers/can_create.yml +2 -2
  62. data/spec/support/vcr_cassettes/Transfers/can_find.yml +3 -3
  63. data/spec/support/vcr_cassettes/Transfers/can_retrieve.yml +3 -3
  64. data/spec/support/vcr_cassettes/VirtualAccounts/can_find.yml +2 -2
  65. data/spec/support/vcr_cassettes/VirtualAccounts/can_find_VANs_for_a_specific_subaccount.yml +2 -2
  66. data/spec/support/vcr_cassettes/VirtualAccounts/can_find_VANs_for_subaccounts.yml +2 -2
  67. data/spec/support/vcr_cassettes/WithdrawalAccounts/can_find_withdrawal_accounts.yml +3 -3
  68. data/spec/support/vcr_cassettes/WithdrawalAccounts/can_find_withdrawal_accounts2.yml +3 -3
  69. data/spec/support/vcr_cassettes/WithdrawalAccounts/can_pull_funds.yml +3 -3
  70. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a32a35776dc24d948b05b58468bdfcd87531749e0d9960620b3bd90862e2fe8
4
- data.tar.gz: 77679ce746ccbab76b2bddef7b2e505b9a639e7605358d11c199df0b63a86c39
3
+ metadata.gz: 56ca7f573209f02aac8bce852b82f4f5405ba71cf80e4313e52fcf1c11e8c22f
4
+ data.tar.gz: e174fc25260c7693efea05dd6c8c504d4afcb85f00a2d1c846b980b88a438cd2
5
5
  SHA512:
6
- metadata.gz: bf1380767273fa04f4426c2d8878cbb743c02389ac1b46723a591eaa99a81829f1a31e4b802cd101e0a48867de313ab181ff5bcd06b127f0468aec06a33a1174
7
- data.tar.gz: f6ccbb75024f7d2125f8fd46945a5e059f353f5a3ffb89eb0ab5efb8f8a7b83603469a1871d8c26a8f8e324cc8e88c29ac38851ed80cbdc9abe4eb4214331c2a
6
+ metadata.gz: 549d645f4897dcceac6ce0a961c7acfdec09c337263539b51da2be5d1b65544b502029e095cce6ff882d32a12287bc4c45c7457710cd799ec6b631ebdfcc624f
7
+ data.tar.gz: 569781a5bd4a481ae2375520788c7e7de12890ee2aefe159b2d85e4a1d2521b42363df75e8d9c481af80258d44bb19ec0988b6964b6bd7a68e1417527e032266
@@ -14,11 +14,11 @@ Gem::Specification.new do |s|
14
14
  s.required_ruby_version = '>= 3.0'
15
15
 
16
16
  s.add_dependency('httparty', '~> 0.24')
17
- s.add_dependency('json', '>= 2.12.2', '< 2.19.0')
17
+ s.add_dependency('json', '>= 2.12.2', '< 2.22.0')
18
18
  s.add_dependency('base64', '~> 0.3.0')
19
19
  s.add_dependency('ostruct', '~> 0.6.3')
20
20
 
21
- s.add_development_dependency('rake', '~> 13.3.0')
21
+ s.add_development_dependency('rake', '~> 13.4.2')
22
22
  s.add_development_dependency('addressable', '<= 2.9.0')
23
23
  s.add_development_dependency('rspec', '~> 3.13.1')
24
24
  s.add_development_dependency('vcr', '~> 6.4.0')
@@ -36,14 +36,24 @@ module CurrencyCloud
36
36
 
37
37
  return unless errors['error_messages']
38
38
 
39
- errors['error_messages'].each do |field, messages|
40
- if messages.is_a?(Array)
41
- messages.each do |message|
42
- @messages << ApiErrorMessage.new(field, message)
39
+ error_messages = errors['error_messages']
40
+
41
+ if error_messages.is_a?(Hash)
42
+ error_messages.each do |field, messages|
43
+ if messages.is_a?(Array)
44
+ messages.each do |message|
45
+ @messages << ApiErrorMessage.new(field, message)
46
+ end
47
+ else
48
+ @messages << ApiErrorMessage.new(field, messages)
43
49
  end
44
- else
45
- @messages << ApiErrorMessage.new(field, messages)
46
50
  end
51
+ else
52
+ @messages << ApiErrorMessage.new('base', {
53
+ 'code' => @code,
54
+ 'message' => error_messages.to_s,
55
+ 'params' => {}
56
+ })
47
57
  end
48
58
  end
49
59
 
@@ -7,7 +7,16 @@ module CurrencyCloud
7
7
  }.freeze
8
8
 
9
9
  attr_reader :environment, :login_id, :api_key
10
- attr_accessor :token, :on_behalf_of
10
+ attr_accessor :token
11
+
12
+ # Stored fiber-local so the shared session can't leak contact context across threads.
13
+ def on_behalf_of
14
+ Thread.current[obo_key]
15
+ end
16
+
17
+ def on_behalf_of=(value)
18
+ Thread.current[obo_key] = value
19
+ end
11
20
 
12
21
  def self.validate_environment(environment)
13
22
  return if ENVIRONMENTS.key?(environment)
@@ -48,6 +57,10 @@ module CurrencyCloud
48
57
 
49
58
  private
50
59
 
60
+ def obo_key
61
+ @obo_key ||= :"cc_on_behalf_of_#{object_id}"
62
+ end
63
+
51
64
  def validate
52
65
  self.class.validate_environment(environment)
53
66
  raise CurrencyCloud::GeneralError, 'login_id must be set using CurrencyCloud.login_id=' unless login_id
@@ -2,5 +2,5 @@
2
2
 
3
3
  module CurrencyCloud
4
4
  API_VERSION = "v2".freeze # API Version
5
- VERSION = "4.4.0".freeze # Gem Version
5
+ VERSION = "4.5.0".freeze # Gem Version
6
6
  end
@@ -8,7 +8,7 @@ lib_path = File.join(File.dirname(__FILE__), '**/*.*')
8
8
  Dir[lib_path].sort.each { |f| require f }
9
9
 
10
10
  module CurrencyCloud
11
- UUID_REGEX = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i
11
+ UUID_REGEX = /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/i
12
12
 
13
13
  class << self
14
14
  attr_accessor :environment, :login_id, :api_key, :token
@@ -110,5 +110,37 @@ describe CurrencyCloud do
110
110
  end
111
111
  end.to raise_error(CurrencyCloud::GeneralError, 'contact id for on behalf of is not a UUID')
112
112
  end
113
+
114
+ it 'rejects a UUID embedded in a larger string' do
115
+ expect do
116
+ CurrencyCloud.on_behalf_of('junk-c6ece846-6df1-461d-acaa-b42a6aa74045-?x=1') do
117
+ raise 'Should raise exception'
118
+ end
119
+ end.to raise_error(CurrencyCloud::GeneralError, 'contact id for on behalf of is not a UUID')
120
+ end
121
+
122
+ it 'does not leak the contact context across concurrent threads' do
123
+ uuid_a = 'c6ece846-6df1-461d-acaa-b42a6aa74045'
124
+ uuid_b = 'f57b2d33-652c-4589-a8ff-7762add2706d'
125
+ observed = {}
126
+ errors = []
127
+
128
+ threads = { a: uuid_a, b: uuid_b }.map do |name, uuid|
129
+ Thread.new do
130
+ CurrencyCloud.on_behalf_of(uuid) do
131
+ sleep 0.05 # widen the window for a cross-thread write to be observed
132
+ observed[name] = CurrencyCloud.session.on_behalf_of
133
+ end
134
+ rescue StandardError => e
135
+ errors << e
136
+ end
137
+ end
138
+ threads.each(&:join)
139
+
140
+ expect(errors).to be_empty
141
+ expect(observed[:a]).to eq(uuid_a)
142
+ expect(observed[:b]).to eq(uuid_b)
143
+ expect(CurrencyCloud.session.on_behalf_of).to be_nil
144
+ end
113
145
  end
114
146
  end
@@ -194,4 +194,27 @@ inner_error: Timeout::Error
194
194
  expect(error_message.params).to be_empty
195
195
  end
196
196
  end
197
+
198
+ it 'handles malformed error_messages as String' do
199
+ raw_response = double('response',
200
+ code: 400,
201
+ parsed_response: {
202
+ 'error_code' => 'invalid_conversion_pair',
203
+ 'error_messages' => 'The conversion pair specified was invalid'
204
+ },
205
+ body: '{"error_code":"invalid_conversion_pair","error_messages":"The conversion pair specified was invalid"}',
206
+ headers: {
207
+ 'Date' => 'Mon, 01 Jan 2024 00:00:00 GMT',
208
+ 'x-request-id' => '12345'
209
+ }
210
+ )
211
+
212
+ error = CurrencyCloud::BadRequestError.new('get', '/v2/reference/conversion_dates', { conversion_pair: 'CADUSD' }, raw_response)
213
+
214
+ expect(error.code).to eq('invalid_conversion_pair')
215
+ expect(error.messages.length).to eq(1)
216
+ expect(error.messages[0].field).to eq('base')
217
+ expect(error.messages[0].code).to eq('invalid_conversion_pair')
218
+ expect(error.messages[0].message).to eq('The conversion pair specified was invalid')
219
+ end
197
220
  end
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -58,7 +58,7 @@ http_interactions:
58
58
  X-Auth-Token:
59
59
  - deadbeefdeadbeefdeadbeefdeadbeef
60
60
  User-Agent:
61
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
61
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
62
62
  response:
63
63
  status:
64
64
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -58,7 +58,7 @@ http_interactions:
58
58
  X-Auth-Token:
59
59
  - deadbeefdeadbeefdeadbeefdeadbeef
60
60
  User-Agent:
61
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
61
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
62
62
  response:
63
63
  status:
64
64
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -58,7 +58,7 @@ http_interactions:
58
58
  X-Auth-Token:
59
59
  - deadbeefdeadbeefdeadbeefdeadbeef
60
60
  User-Agent:
61
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
61
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
62
62
  response:
63
63
  status:
64
64
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -58,7 +58,7 @@ http_interactions:
58
58
  X-Auth-Token:
59
59
  - deadbeefdeadbeefdeadbeefdeadbeef
60
60
  User-Agent:
61
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
61
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
62
62
  response:
63
63
  status:
64
64
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -33,7 +33,7 @@ http_interactions:
33
33
  X-Auth-Token:
34
34
  - deadbeefdeadbeefdeadbeef
35
35
  User-Agent:
36
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
36
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
37
37
  response:
38
38
  status:
39
39
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -33,7 +33,7 @@ http_interactions:
33
33
  X-Auth-Token:
34
34
  - deadbeefdeadbeefdeadbeef
35
35
  User-Agent:
36
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
36
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
37
37
  response:
38
38
  status:
39
39
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -60,7 +60,7 @@ http_interactions:
60
60
  X-Auth-Token:
61
61
  - deadbeefdeadbeefdeadbeefdeadbeef
62
62
  User-Agent:
63
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
63
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
64
64
  response:
65
65
  status:
66
66
  code: 200
@@ -112,7 +112,7 @@ http_interactions:
112
112
  X-Auth-Token:
113
113
  - deadbeefdeadbeefdeadbeefdeadbeef
114
114
  User-Agent:
115
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
115
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
116
116
  response:
117
117
  status:
118
118
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -60,7 +60,7 @@ http_interactions:
60
60
  X-Auth-Token:
61
61
  - deadbeefdeadbeefdeadbeefdeadbeef
62
62
  User-Agent:
63
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
63
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
64
64
  response:
65
65
  status:
66
66
  code: 200
@@ -112,7 +112,7 @@ http_interactions:
112
112
  X-Auth-Token:
113
113
  - deadbeefdeadbeefdeadbeefdeadbeef
114
114
  User-Agent:
115
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
115
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
116
116
  response:
117
117
  status:
118
118
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -58,7 +58,7 @@ http_interactions:
58
58
  X-Auth-Token:
59
59
  - deadbeefdeadbeefdeadbeefdeadbeef
60
60
  User-Agent:
61
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
61
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
62
62
  response:
63
63
  status:
64
64
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -60,7 +60,7 @@ http_interactions:
60
60
  X-Auth-Token:
61
61
  - deadbeefdeadbeefdeadbeefdeadbeef
62
62
  User-Agent:
63
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
63
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
64
64
  response:
65
65
  status:
66
66
  code: 200
@@ -112,7 +112,7 @@ http_interactions:
112
112
  X-Auth-Token:
113
113
  - deadbeefdeadbeefdeadbeefdeadbeef
114
114
  User-Agent:
115
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
115
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
116
116
  response:
117
117
  status:
118
118
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -37,7 +37,7 @@ http_interactions:
37
37
  X-Auth-Token:
38
38
  - deadbeefdeadbeefdeadbeefdeadbeef
39
39
  User-Agent:
40
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
40
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
41
41
  response:
42
42
  status:
43
43
  code: 200
@@ -66,7 +66,7 @@ http_interactions:
66
66
  X-Auth-Token:
67
67
  - deadbeefdeadbeefdeadbeefdeadbeef
68
68
  User-Agent:
69
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
69
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
70
70
  response:
71
71
  status:
72
72
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -37,7 +37,7 @@ http_interactions:
37
37
  X-Auth-Token:
38
38
  - deadbeefdeadbeefdeadbeefdeadbeef
39
39
  User-Agent:
40
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
40
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
41
41
  response:
42
42
  status:
43
43
  code: 200
@@ -66,7 +66,7 @@ http_interactions:
66
66
  X-Auth-Token:
67
67
  - deadbeefdeadbeefdeadbeefdeadbeef
68
68
  User-Agent:
69
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
69
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
70
70
  response:
71
71
  status:
72
72
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -37,7 +37,7 @@ http_interactions:
37
37
  X-Auth-Token:
38
38
  - deadbeefdeadbeefdeadbeefdeadbeef
39
39
  User-Agent:
40
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
40
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
41
41
  response:
42
42
  status:
43
43
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -60,7 +60,7 @@ http_interactions:
60
60
  X-Auth-Token:
61
61
  - deadbeefdeadbeefdeadbeefdeadbeef
62
62
  User-Agent:
63
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
63
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
64
64
  response:
65
65
  status:
66
66
  code: 200
@@ -112,7 +112,7 @@ http_interactions:
112
112
  X-Auth-Token:
113
113
  - deadbeefdeadbeefdeadbeefdeadbeef
114
114
  User-Agent:
115
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
115
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
116
116
  response:
117
117
  status:
118
118
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -37,7 +37,7 @@ http_interactions:
37
37
  X-Auth-Token:
38
38
  - deadbeefdeadbeefdeadbeefdeadbeef
39
39
  User-Agent:
40
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
40
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
41
41
  response:
42
42
  status:
43
43
  code: 200
@@ -66,7 +66,7 @@ http_interactions:
66
66
  X-Auth-Token:
67
67
  - deadbeefdeadbeefdeadbeefdeadbeef
68
68
  User-Agent:
69
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
69
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
70
70
  response:
71
71
  status:
72
72
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -37,7 +37,7 @@ http_interactions:
37
37
  X-Auth-Token:
38
38
  - deadbeefdeadbeefdeadbeefdeadbeef
39
39
  User-Agent:
40
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
40
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
41
41
  response:
42
42
  status:
43
43
  code: 200
@@ -66,7 +66,7 @@ http_interactions:
66
66
  X-Auth-Token:
67
67
  - deadbeefdeadbeefdeadbeefdeadbeef
68
68
  User-Agent:
69
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
69
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
70
70
  response:
71
71
  status:
72
72
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -64,7 +64,7 @@ http_interactions:
64
64
  X-Auth-Token:
65
65
  - deadbeefdeadbeefdeadbeefdeadbeef
66
66
  User-Agent:
67
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
67
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
68
68
  response:
69
69
  status:
70
70
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -64,7 +64,7 @@ http_interactions:
64
64
  X-Auth-Token:
65
65
  - deadbeefdeadbeefdeadbeefdeadbeef
66
66
  User-Agent:
67
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
67
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
68
68
  response:
69
69
  status:
70
70
  code: 400
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -64,7 +64,7 @@ http_interactions:
64
64
  X-Auth-Token:
65
65
  - deadbeefdeadbeefdeadbeefdeadbeef
66
66
  User-Agent:
67
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
67
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
68
68
  response:
69
69
  status:
70
70
  code: 400
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 401
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -33,7 +33,7 @@ http_interactions:
33
33
  X-Auth-Token:
34
34
  - deadbeefdeadbeefdeadbeef
35
35
  User-Agent:
36
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
36
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
37
37
  response:
38
38
  status:
39
39
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -60,7 +60,7 @@ http_interactions:
60
60
  X-Auth-Token:
61
61
  - deadbeefdeadbeefdeadbeefdeadbeef
62
62
  User-Agent:
63
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
63
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
64
64
  response:
65
65
  status:
66
66
  code: 200
@@ -8,7 +8,7 @@ http_interactions:
8
8
  string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers:
10
10
  User-Agent:
11
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
11
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
12
12
  response:
13
13
  status:
14
14
  code: 200
@@ -60,7 +60,7 @@ http_interactions:
60
60
  X-Auth-Token:
61
61
  - deadbeefdeadbeefdeadbeefdeadbeef
62
62
  User-Agent:
63
- - CurrencyCloudSDK/2.0 Ruby/4.4.0
63
+ - CurrencyCloudSDK/2.0 Ruby/4.5.0
64
64
  response:
65
65
  status:
66
66
  code: 200