currency_cloud 0.9.0 → 0.10.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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +31 -0
  3. data/.rubocop.yml +6 -0
  4. data/.travis.yml +2 -4
  5. data/Gemfile +0 -3
  6. data/LICENSE.md +16 -17
  7. data/README.md +5 -3
  8. data/Rakefile +12 -12
  9. data/currency_cloud.gemspec +9 -9
  10. data/examples/server.rb +7 -7
  11. data/lib/currency_cloud/client.rb +5 -1
  12. data/lib/currency_cloud/conversion.rb +15 -0
  13. data/lib/currency_cloud/conversion_cancel_result.rb +5 -0
  14. data/lib/currency_cloud/conversion_date_change_result.rb +5 -0
  15. data/lib/currency_cloud/conversion_split_result.rb +5 -0
  16. data/lib/currency_cloud/errors/api_error.rb +2 -2
  17. data/lib/currency_cloud/errors/error_utils.rb +4 -4
  18. data/lib/currency_cloud/errors/unexpected_error.rb +3 -3
  19. data/lib/currency_cloud/iban.rb +22 -0
  20. data/lib/currency_cloud/ibans.rb +6 -0
  21. data/lib/currency_cloud/payer_required_details.rb +5 -0
  22. data/lib/currency_cloud/payment.rb +10 -0
  23. data/lib/currency_cloud/payment_authorisation_result.rb +5 -0
  24. data/lib/currency_cloud/payment_dates.rb +5 -0
  25. data/lib/currency_cloud/payment_submission.rb +5 -0
  26. data/lib/currency_cloud/purpose_code.rb +5 -0
  27. data/lib/currency_cloud/reference.rb +20 -5
  28. data/lib/currency_cloud/request_handler.rb +1 -3
  29. data/lib/currency_cloud/response_handler.rb +7 -7
  30. data/lib/currency_cloud/session.rb +2 -3
  31. data/lib/currency_cloud/transfer.rb +8 -0
  32. data/lib/currency_cloud/version.rb +1 -1
  33. data/lib/currency_cloud/virtual_account.rb +22 -0
  34. data/lib/currency_cloud/virtual_accounts.rb +6 -0
  35. data/spec/currency_cloud_spec.rb +9 -9
  36. data/spec/integration/authentication_spec.rb +2 -2
  37. data/spec/integration/conversions_spec.rb +94 -0
  38. data/spec/integration/error_utils_spec.rb +12 -12
  39. data/spec/integration/errors_spec.rb +84 -102
  40. data/spec/integration/ibans_spec.rb +42 -0
  41. data/spec/integration/payment_spec.rb +31 -0
  42. data/spec/integration/payments_spec.rb +67 -0
  43. data/spec/integration/reference_spec.rb +37 -14
  44. data/spec/integration/transfers_spec.rb +39 -0
  45. data/spec/integration/virtual_accounts_spec.rb +37 -0
  46. data/spec/spec_helper.rb +9 -1
  47. data/spec/support/vcr_cassettes/Authentication/can_be_closed.yml +1 -1
  48. data/spec/support/vcr_cassettes/Authentication/handles_session_timeout_error.yml +1 -1
  49. data/spec/support/vcr_cassettes/Authentication/happens_lazily.yml +1 -1
  50. data/spec/support/vcr_cassettes/Conversions/can_cancel_conversion/with_notes/has_a_non-empty_notes_attribute.yml +158 -0
  51. data/spec/support/vcr_cassettes/Conversions/can_cancel_conversion/without_notes/has_a_empty_notes_attribute.yml +157 -0
  52. data/spec/support/vcr_cassettes/Conversions/can_date_change_conversion.yml +157 -0
  53. data/spec/support/vcr_cassettes/Conversions/can_split_conversion.yml +157 -0
  54. data/spec/support/vcr_cassettes/Error/contains_full_details_for_api_error.yml +1 -1
  55. data/spec/support/vcr_cassettes/Error/is_raised_on_a_bad_request.yml +1 -1
  56. data/spec/support/vcr_cassettes/Error/is_raised_on_a_forbidden_request.yml +1 -1
  57. data/spec/support/vcr_cassettes/Error/is_raised_on_an_internal_server_error.yml +1 -1
  58. data/spec/support/vcr_cassettes/Error/is_raised_on_incorrect_authentication_details.yml +1 -1
  59. data/spec/support/vcr_cassettes/Error/is_raised_when_too_many_requests_have_been_issued.yml +1 -1
  60. data/spec/support/vcr_cassettes/IBANs/can_IBANs_for_a_specific_subaccount.yml +109 -0
  61. data/spec/support/vcr_cassettes/IBANs/can_IBANs_for_subaccounts.yml +108 -0
  62. data/spec/support/vcr_cassettes/IBANs/can_find.yml +114 -0
  63. data/spec/support/vcr_cassettes/Payments/can_authorise/when_payment_ids_are_valid.yml +263 -0
  64. data/spec/support/vcr_cassettes/Payments/can_create.yml +155 -0
  65. data/spec/support/vcr_cassettes/Payments/can_get_the_submission.yml +205 -0
  66. data/spec/support/vcr_cassettes/Reference/can_retrieve_beneficiary_required_details.yml +77 -12
  67. data/spec/support/vcr_cassettes/Reference/can_retrieve_conversion_dates.yml +183 -22
  68. data/spec/support/vcr_cassettes/Reference/can_retrieve_currencies.yml +110 -22
  69. data/spec/support/vcr_cassettes/Reference/can_retrieve_payer_required_details.yml +103 -0
  70. data/spec/support/vcr_cassettes/Reference/can_retrieve_payment_dates.yml +110 -0
  71. data/spec/support/vcr_cassettes/Reference/can_retrieve_payment_purpose_codes.yml +128 -0
  72. data/spec/support/vcr_cassettes/Reference/can_retrieve_settlement_accounts.yml +76 -11
  73. data/spec/support/vcr_cassettes/Settlements/can_add_conversion.yml +56 -6
  74. data/spec/support/vcr_cassettes/Settlements/can_release.yml +55 -5
  75. data/spec/support/vcr_cassettes/Settlements/can_remove_conversion.yml +55 -5
  76. data/spec/support/vcr_cassettes/Settlements/can_unrelease.yml +55 -5
  77. data/spec/support/vcr_cassettes/Transfers/can_create.yml +101 -0
  78. data/spec/support/vcr_cassettes/Transfers/can_find.yml +151 -0
  79. data/spec/support/vcr_cassettes/Transfers/can_retrieve.yml +151 -0
  80. data/spec/support/vcr_cassettes/VirtualAccounts/can_find.yml +108 -0
  81. data/spec/support/vcr_cassettes/VirtualAccounts/can_find_VANs_for_a_specific_subaccount.yml +108 -0
  82. data/spec/support/vcr_cassettes/VirtualAccounts/can_find_VANs_for_subaccounts.yml +108 -0
  83. metadata +82 -20
  84. data/Guardfile +0 -14
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'IBANs', vcr: true do
4
+ it 'can #find' do
5
+ ibans = CurrencyCloud::IBAN.find
6
+
7
+ expect(ibans).to_not be_empty
8
+ expect(ibans).to be_a(CurrencyCloud::IBANs)
9
+
10
+ iban = ibans[0]
11
+ expect(iban).to be_a(CurrencyCloud::IBAN)
12
+ expect(iban.id).to eq "8242d1f4-4555-4155-a9bf-30feee785121"
13
+ expect(iban.iban_code).to eq 'GB51TCCL00997961584807'
14
+ expect(iban.currency).to eq 'EUR'
15
+ end
16
+
17
+ it 'can IBANs for subaccounts' do
18
+ ibans = CurrencyCloud::IBAN.for_subaccounts
19
+
20
+ expect(ibans).to_not be_empty
21
+ expect(ibans).to be_a(CurrencyCloud::IBANs)
22
+
23
+ iban = ibans[0]
24
+ expect(iban).to be_a(CurrencyCloud::IBAN)
25
+ expect(iban.id).to eq "01d8c0bc-7f0c-4cdd-bc7e-ef81f68500fe"
26
+ expect(iban.iban_code).to eq 'GB51TCCL00997997989489'
27
+ expect(iban.currency).to eq 'EUR'
28
+ end
29
+
30
+ it 'can IBANs for a specific subaccount' do
31
+ ibans = CurrencyCloud::IBAN.for_subaccount('87077161-91de-012f-e284-1e0030c7f353')
32
+
33
+ expect(ibans).to_not be_empty
34
+ expect(ibans).to be_a(CurrencyCloud::IBANs)
35
+
36
+ iban = ibans[0]
37
+ expect(iban).to be_a(CurrencyCloud::IBAN)
38
+ expect(iban.id).to eq "01d8c0bc-7f0c-4cdd-bc7e-ef81f68500fe"
39
+ expect(iban.iban_code).to eq 'GB51TCCL00997997989490'
40
+ expect(iban.currency).to eq 'JPY'
41
+ end
42
+ end
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Payment', vcr: true do
4
+ let(:beneficiary_params) do
5
+ {
6
+ name: 'Employee Funds',
7
+ bank_account_holder_name: 'John Doe',
8
+ bank_country: 'GB',
9
+ currency: 'GBP',
10
+ email: 'john.doe@acme.com',
11
+ account_number: '1204567890003466',
12
+ routing_code_type_1: 'sort_code',
13
+ routing_code_value_1: '990901'
14
+ }
15
+ end
16
+
17
+ let(:beneficiary) do
18
+ CurrencyCloud::Beneficiary.create(beneficiary_params)
19
+ end
20
+
21
+ let(:payment_params) do
22
+ {
23
+ currency: 'GBP',
24
+ beneficiary_id: beneficiary.id,
25
+ amount: 1_500,
26
+ reason: 'SDK payment testing',
27
+ reference: 'My reference code',
28
+ payment_type: 'regular'
29
+ }
30
+ end
31
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Payments', vcr: true do
4
+ let(:beneficiary_details) do
5
+ {
6
+ bank_account_holder_name: 'Test User',
7
+ bank_country: 'GB',
8
+ currency: 'GBP',
9
+ name: 'Test User',
10
+ account_number: '12345678',
11
+ routing_code_type_1: 'sort_code',
12
+ routing_code_value_1: '123456'
13
+ }
14
+ end
15
+
16
+ let(:beneficiary) { CurrencyCloud::Beneficiary.create(beneficiary_details) }
17
+
18
+ let(:payment_details) do
19
+ {
20
+ currency: 'GBP',
21
+ beneficiary_id: beneficiary.id,
22
+ amount: '1000',
23
+ reason: 'Testing payments',
24
+ reference: 'Testing payments',
25
+ payment_type: 'regular'
26
+ }
27
+ end
28
+
29
+ it 'can #create' do
30
+ payment = CurrencyCloud::Payment.create(payment_details)
31
+ expect(payment).to_not be_nil
32
+ expect(payment).to be_a(CurrencyCloud::Payment)
33
+
34
+ expect(payment.reason).to eq 'Testing payments'
35
+ end
36
+
37
+ it 'can get the submission' do
38
+ payment = CurrencyCloud::Payment.create(payment_details)
39
+ expect(payment).to_not be_nil
40
+
41
+ submission = payment.submission
42
+ expect(submission).to_not be_nil
43
+ expect(submission).to be_a(CurrencyCloud::PaymentSubmission)
44
+ end
45
+
46
+ describe "can #authorise" do
47
+ before do
48
+ @payment = CurrencyCloud::Payment.create(payment_details)
49
+
50
+ CurrencyCloud.reset_session
51
+ CurrencyCloud.login_id = 'development+authorisations@currencycloud.com'
52
+ CurrencyCloud.api_key = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef'
53
+ end
54
+
55
+ it 'when "payment_ids" are valid' do
56
+ authorisations = CurrencyCloud::Payment.authorise(@payment.id)
57
+ expect(authorisations).to_not be_empty
58
+
59
+ authorisation = authorisations.first
60
+ expect(authorisation).to be_a CurrencyCloud::PaymentAuthorisationResult
61
+
62
+ expect(authorisation.payment_id).to eq @payment.id
63
+ expect(authorisation.payment_status).to eq 'authorised'
64
+ expect(authorisation.updated).to eq true
65
+ end
66
+ end
67
+ end
@@ -2,9 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Reference', vcr: true do
4
4
  before do
5
- CurrencyCloud.reset_session
5
+ CurrencyCloud.login_id = 'development@currencycloud.com'
6
+ CurrencyCloud.api_key = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef'
6
7
  CurrencyCloud.environment = :demonstration
7
- CurrencyCloud.token = '1c9da5726314246acfb09ec5651307a5'
8
+ CurrencyCloud.reset_session
8
9
  end
9
10
 
10
11
  it 'can retrieve #beneficiary_required_details' do
@@ -12,14 +13,8 @@ describe 'Reference', vcr: true do
12
13
  expect(details).to_not be_empty
13
14
 
14
15
  details = details.first
15
- expect(details['payment_type']).to eq('priority')
16
- expect(details['payment_type']).to eq('priority')
16
+ expect(details['payment_type']).to eq('regular')
17
17
  expect(details['beneficiary_entity_type']).to eq('individual')
18
- expect(details['beneficiary_address']).to eq('^.{1,255}')
19
- expect(details['beneficiary_city']).to eq('^.{1,255}')
20
- expect(details['beneficiary_country']).to eq('^[A-z]{2}$')
21
- expect(details['beneficiary_first_name']).to eq('^.{1,255}')
22
- expect(details['beneficiary_last_name']).to eq('^.{1,255}')
23
18
  expect(details['acct_number']).to eq('^[0-9A-Z]{1,50}$')
24
19
  expect(details['sort_code']).to eq('^\\d{6}$')
25
20
  end
@@ -29,9 +24,9 @@ describe 'Reference', vcr: true do
29
24
 
30
25
  expect(dates.invalid_conversion_dates).to_not be_empty
31
26
  invalid_conversion_date = dates.invalid_conversion_dates.first
32
- expect(invalid_conversion_date).to eq(['2015-05-02', 'No trading on Saturday'])
33
- expect(dates.first_conversion_date).to eq('2015-04-30')
34
- expect(dates.default_conversion_date).to eq('2015-04-30')
27
+ expect(invalid_conversion_date).to eq(['2018-07-21', 'No trading on Saturday'])
28
+ expect(dates.first_conversion_date).to eq('2018-07-16')
29
+ expect(dates.default_conversion_date).to eq('2018-07-18')
35
30
  end
36
31
 
37
32
  it 'can retrieve #currencies' do
@@ -39,18 +34,46 @@ describe 'Reference', vcr: true do
39
34
  expect(currencies).to_not be_empty
40
35
 
41
36
  currency = currencies.first
42
- expect(currency).to be_a_kind_of(CurrencyCloud::Currency)
37
+ expect(currency).to be_a(CurrencyCloud::Currency)
43
38
  expect(currency.code).to eq('AED')
44
39
  expect(currency.name).to eq('United Arab Emirates Dirham')
45
40
  expect(currency.decimal_places).to eq(2)
46
41
  end
47
42
 
43
+ it 'can retrieve #payer_required_details' do
44
+ payer_required_details = CurrencyCloud::Reference.payer_required_details(payer_country: 'GB')
45
+ expect(payer_required_details).to_not be_empty
46
+
47
+ required_details = payer_required_details[0]
48
+ expect(required_details).to be_a(CurrencyCloud::PayerRequiredDetails)
49
+
50
+ expect(required_details.payer_entity_type).to_not be_nil
51
+ expect(required_details.payment_type).to_not be_nil
52
+ expect(required_details.required_fields).to_not be_empty
53
+ end
54
+
55
+ it 'can retrieve #payment_dates' do
56
+ payment_dates = CurrencyCloud::Reference.payment_dates(currency: 'GBP')
57
+ expect(payment_dates).to_not be_nil
58
+ expect(payment_dates).to be_a(CurrencyCloud::PaymentDates)
59
+
60
+ expect(payment_dates.invalid_payment_dates).to_not be_empty
61
+ end
62
+
63
+ it 'can retrieve #payment_purpose_codes' do
64
+ payment_purpose_codes = CurrencyCloud::Reference.payment_purpose_codes(currency: 'INR')
65
+ expect(payment_purpose_codes).to_not be_empty
66
+
67
+ purpose_code = payment_purpose_codes.first
68
+ expect(purpose_code).to be_a(CurrencyCloud::PurposeCode)
69
+ end
70
+
48
71
  it 'can retrieve #settlement_accounts' do
49
72
  settlement_accounts = CurrencyCloud::Reference.settlement_accounts(currency: 'GBP')
50
73
  expect(settlement_accounts).to_not be_empty
51
74
 
52
75
  settlement_account = settlement_accounts.first
53
- expect(settlement_account).to be_a_kind_of(CurrencyCloud::SettlementAccount)
76
+ expect(settlement_account).to be_a(CurrencyCloud::SettlementAccount)
54
77
  expect(settlement_account.bank_account_holder_name).to eq('The Currency Cloud GBP - Client Seg A/C')
55
78
  expect(settlement_account.bank_address).to be_empty
56
79
  end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Transfers', vcr: true do
4
+ let(:transfer_details) do
5
+ {
6
+ source_account_id: 'd0ad035e-b699-4fcd-a73c-13fb0910a884',
7
+ destination_account_id: 'e54a5e86-80ad-4434-90fe-0c8c751666de',
8
+ currency: 'GBP',
9
+ amount: '1000'
10
+ }
11
+ end
12
+
13
+ it 'can #create' do
14
+ transfer = CurrencyCloud::Transfer.create(transfer_details)
15
+ expect(transfer).to_not be_nil
16
+ expect(transfer).to be_a(CurrencyCloud::Transfer)
17
+
18
+ expect(transfer.source_account_id).to eq 'd0ad035e-b699-4fcd-a73c-13fb0910a884'
19
+ end
20
+
21
+ it 'can #find' do
22
+ CurrencyCloud::Transfer.create(transfer_details)
23
+
24
+ transfers = CurrencyCloud::Transfer.find(currency: 'GBP', per_page: 1)
25
+ expect(transfers.length).to eq 1
26
+
27
+ transfer = transfers[0]
28
+ expect(transfer).to be_a(CurrencyCloud::Transfer)
29
+ expect(transfer.currency).to eq 'GBP'
30
+ end
31
+
32
+ it 'can #retrieve' do
33
+ transfer_id = CurrencyCloud::Transfer.create(transfer_details).id
34
+
35
+ transfer = CurrencyCloud::Transfer.retrieve(transfer_id)
36
+ expect(transfer).to_not be_nil
37
+ expect(transfer).to be_a(CurrencyCloud::Transfer)
38
+ end
39
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'VirtualAccounts', vcr: true do
4
+ it 'can #find' do
5
+ vans = CurrencyCloud::VirtualAccount.find
6
+
7
+ expect(vans).to_not be_empty
8
+ expect(vans).to be_a(CurrencyCloud::VirtualAccounts)
9
+
10
+ van = vans[0]
11
+ expect(van).to be_a(CurrencyCloud::VirtualAccount)
12
+ expect(van.id).to eq "00d272ee-fae5-4f97-b425-993a2d6e3a46"
13
+ expect(van.virtual_account_number).to eq '8303723297'
14
+ end
15
+
16
+ it 'can find VANs for subaccounts' do
17
+ vans = CurrencyCloud::VirtualAccount.for_subaccounts
18
+ expect(vans).to_not be_empty
19
+ expect(vans).to be_a(CurrencyCloud::VirtualAccounts)
20
+
21
+ van = vans[0]
22
+ expect(van).to be_a(CurrencyCloud::VirtualAccount)
23
+ expect(van.id).to eq "00d272ee-fae5-4f97-b425-993a2d6e3a46"
24
+ expect(van.virtual_account_number).to eq '8303723297'
25
+ end
26
+
27
+ it 'can find VANs for a specific subaccount' do
28
+ vans = CurrencyCloud::VirtualAccount.for_subaccount('87077161-91de-012f-e284-1e0030c7f353')
29
+ expect(vans).to_not be_empty
30
+ expect(vans).to be_a(CurrencyCloud::VirtualAccounts)
31
+
32
+ van = vans[0]
33
+ expect(van).to be_a(CurrencyCloud::VirtualAccount)
34
+ expect(van.id).to eq "00d272ee-fae5-4f97-b425-993a2d6e3a46"
35
+ expect(van.virtual_account_number).to eq '8303723297'
36
+ end
37
+ end
@@ -1,4 +1,3 @@
1
- require 'pry'
2
1
  require 'vcr'
3
2
 
4
3
  VCR.configure do |c|
@@ -10,3 +9,12 @@ VCR.configure do |c|
10
9
  end
11
10
 
12
11
  require 'currency_cloud'
12
+
13
+ RSpec.configure do |config|
14
+ config.before do
15
+ CurrencyCloud.login_id = 'development@currencycloud.com'
16
+ CurrencyCloud.api_key = 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef'
17
+ CurrencyCloud.environment = :demonstration
18
+ CurrencyCloud.reset_session
19
+ end
20
+ end
@@ -5,7 +5,7 @@ http_interactions:
5
5
  uri: https://devapi.currencycloud.com/v2/authenticate/api
6
6
  body:
7
7
  encoding: UTF-8
8
- string: login_id=rjnienaber%40gmail.com&api_key=ef0fd50fca1fb14c1fab3a8436b9ecb65f02f129fd87eafa45ded8ae257528f0
8
+ string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers: {}
10
10
  response:
11
11
  status:
@@ -39,7 +39,7 @@ http_interactions:
39
39
  uri: https://devapi.currencycloud.com/v2/authenticate/api
40
40
  body:
41
41
  encoding: UTF-8
42
- string: login_id=rjnienaber%40gmail.com&api_key=ef0fd50fca1fb14c1fab3a8436b9ecb65f02f129fd87eafa45ded8ae257528f0
42
+ string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
43
43
  headers: {}
44
44
  response:
45
45
  status:
@@ -5,7 +5,7 @@ http_interactions:
5
5
  uri: https://devapi.currencycloud.com/v2/authenticate/api
6
6
  body:
7
7
  encoding: UTF-8
8
- string: login_id=rjnienaber%40gmail.com&api_key=ef0fd50fca1fb14c1fab3a8436b9ecb65f02f129fd87eafa45ded8ae257528f0
8
+ string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
9
  headers: {}
10
10
  response:
11
11
  status:
@@ -0,0 +1,158 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://devapi.currencycloud.com/v2/authenticate/api
6
+ body:
7
+ encoding: UTF-8
8
+ string: login_id=development%40currencycloud.com&api_key=deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef
9
+ headers:
10
+ User-Agent:
11
+ - CurrencyCloudSDK/2.0 Ruby/0.9.0
12
+ response:
13
+ status:
14
+ code: 200
15
+ message: OK
16
+ headers:
17
+ Date:
18
+ - Mon, 16 Jul 2018 10:41:12 GMT
19
+ Content-Type:
20
+ - application/json;charset=utf-8
21
+ Transfer-Encoding:
22
+ - chunked
23
+ Connection:
24
+ - keep-alive
25
+ Set-Cookie:
26
+ - AWSALB=yBgYKjcJj0u6FEX9Fby6XCzIHifH69/DE7iE/fsEeVfY21LA/TIbc9Mbn8Om/NuB27XHf0x6o0K9je9TOQMuUt0UsLKrz5j0nGVsrYSMwdiVmyRYCH0MzvRQVYhu;
27
+ Expires=Mon, 23 Jul 2018 10:41:10 GMT; Path=/
28
+ - __cfduid=d7c2d7b15fd072f2e6a3d82784fc0ebaa1531737670; expires=Tue, 16-Jul-19
29
+ 10:41:10 GMT; path=/; domain=.currencycloud.com; HttpOnly
30
+ Access-Control-Allow-Origin:
31
+ - "*"
32
+ X-Request-Id:
33
+ - 61677c3a-8bf0-4c8f-b543-ef7367d62b07
34
+ Access-Control-Allow-Methods:
35
+ - POST
36
+ X-Content-Type-Options:
37
+ - nosniff
38
+ Vary:
39
+ - Origin
40
+ Access-Control-Allow-Headers:
41
+ - authorization,Access-Control-Allow-Origin,Content-Type,SOAPAction,X-Auth-Token,Origin,Authority
42
+ Expect-Ct:
43
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
44
+ Server:
45
+ - cloudflare
46
+ Cf-Ray:
47
+ - 43b3dadb0a54137d-LHR
48
+ body:
49
+ encoding: UTF-8
50
+ string: '{"auth_token":"deadbeefdeadbeefdeadbeefdeadbeef"}'
51
+ http_version:
52
+ recorded_at: Mon, 16 Jul 2018 10:41:12 GMT
53
+ - request:
54
+ method: post
55
+ uri: https://devapi.currencycloud.com/v2/conversions/create
56
+ body:
57
+ encoding: UTF-8
58
+ string: buy_currency=USD&sell_currency=GBP&fixed_side=buy&amount=95000&reason=SDK%20conversion%20testing&term_agreement=true
59
+ headers:
60
+ X-Auth-Token:
61
+ - deadbeefdeadbeefdeadbeefdeadbeef
62
+ User-Agent:
63
+ - CurrencyCloudSDK/2.0 Ruby/0.9.0
64
+ response:
65
+ status:
66
+ code: 200
67
+ message: OK
68
+ headers:
69
+ Date:
70
+ - Mon, 16 Jul 2018 10:41:13 GMT
71
+ Content-Type:
72
+ - application/json;charset=utf-8
73
+ Transfer-Encoding:
74
+ - chunked
75
+ Connection:
76
+ - keep-alive
77
+ Set-Cookie:
78
+ - AWSALB=kPEDIb5u7MNUkVOPPynbppWUqy6BdRV0PzTnzfLFkMxoi5dqdRjus9JageCyV83/+/RSMEgHAP3q3A0Qbx0d+1SryWUDMr+6ZEM7fVmgOCgHd5d2142J/h98fyoS;
79
+ Expires=Mon, 23 Jul 2018 10:41:12 GMT; Path=/
80
+ - __cfduid=df77720127ba8f4f9dbc7559fc3040a8c1531737672; expires=Tue, 16-Jul-19
81
+ 10:41:12 GMT; path=/; domain=.currencycloud.com; HttpOnly
82
+ Access-Control-Allow-Origin:
83
+ - "*"
84
+ X-Request-Id:
85
+ - 5c423da2-fad0-49f7-8d90-9ed5bf4c5f8c
86
+ Access-Control-Allow-Methods:
87
+ - POST
88
+ X-Content-Type-Options:
89
+ - nosniff
90
+ Vary:
91
+ - Origin
92
+ Access-Control-Allow-Headers:
93
+ - authorization,Access-Control-Allow-Origin,Content-Type,SOAPAction,X-Auth-Token,Origin,Authority
94
+ Expect-Ct:
95
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
96
+ Server:
97
+ - cloudflare
98
+ Cf-Ray:
99
+ - 43b3dae5d9980a66-LHR
100
+ body:
101
+ encoding: UTF-8
102
+ string: '{"id":"81b23958-cde7-4882-a4ae-f0da6a95d6cb","settlement_date":"2018-07-18T15:30:00+00:00","conversion_date":"2018-07-18T00:00:00+00:00","short_reference":"20180716-MGHWYQ","creator_contact_id":"04d0c252-7b78-4d72-b408-df78841e3ddc","account_id":"67e1b252-40a7-454d-a097-8f77d385889d","currency_pair":"GBPUSD","status":"awaiting_funds","buy_currency":"USD","sell_currency":"GBP","client_buy_amount":"95000.00","client_sell_amount":"67476.38","fixed_side":"buy","core_rate":"1.4079","partner_rate":"","partner_status":"awaiting_funds","partner_buy_amount":"0.00","partner_sell_amount":"0.00","client_rate":"1.4079","deposit_required":false,"deposit_amount":"0.00","deposit_currency":"","deposit_status":"not_required","deposit_required_at":"","payment_ids":[],"unallocated_funds":"0.00","unique_request_id":null,"created_at":"2018-07-16T10:41:12+00:00","updated_at":"2018-07-16T10:41:13+00:00","mid_market_rate":"1.4080"}'
103
+ http_version:
104
+ recorded_at: Mon, 16 Jul 2018 10:41:13 GMT
105
+ - request:
106
+ method: post
107
+ uri: https://devapi.currencycloud.com/v2/conversions/81b23958-cde7-4882-a4ae-f0da6a95d6cb/cancel
108
+ body:
109
+ encoding: UTF-8
110
+ string: notes=Business%20Terminated%20Contract
111
+ headers:
112
+ X-Auth-Token:
113
+ - deadbeefdeadbeefdeadbeefdeadbeef
114
+ User-Agent:
115
+ - CurrencyCloudSDK/2.0 Ruby/0.9.0
116
+ response:
117
+ status:
118
+ code: 200
119
+ message: OK
120
+ headers:
121
+ Date:
122
+ - Mon, 16 Jul 2018 10:41:14 GMT
123
+ Content-Type:
124
+ - application/json;charset=utf-8
125
+ Transfer-Encoding:
126
+ - chunked
127
+ Connection:
128
+ - keep-alive
129
+ Set-Cookie:
130
+ - AWSALB=CPsdE2dKlqAr7Ce0uybmWUL+6azCONRdBosWGV6TfG3LgVTWHx1jiTVcqZdMXq9VDqGeogylymvK8vu0pXlj4t2eLgtwN/23PfeaVKWFt6FHFrqjxNwBfDt4dBOp;
131
+ Expires=Mon, 23 Jul 2018 10:41:13 GMT; Path=/
132
+ - __cfduid=daf5c616e86fed74225159aa259137d1e1531737673; expires=Tue, 16-Jul-19
133
+ 10:41:13 GMT; path=/; domain=.currencycloud.com; HttpOnly
134
+ Access-Control-Allow-Origin:
135
+ - "*"
136
+ X-Request-Id:
137
+ - 036105c5-ad2e-4e89-8f36-306b1c187c60
138
+ Access-Control-Allow-Methods:
139
+ - POST
140
+ X-Content-Type-Options:
141
+ - nosniff
142
+ Vary:
143
+ - Origin
144
+ Access-Control-Allow-Headers:
145
+ - authorization,Access-Control-Allow-Origin,Content-Type,SOAPAction,X-Auth-Token,Origin,Authority
146
+ Expect-Ct:
147
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
148
+ Server:
149
+ - cloudflare
150
+ Cf-Ray:
151
+ - 43b3daeaf8080a6c-LHR
152
+ body:
153
+ encoding: UTF-8
154
+ string: '{"account_id":"67e1b252-40a7-454d-a097-8f77d385889d","contact_id":"04d0c252-7b78-4d72-b408-df78841e3ddc","event_account_id":"67e1b252-40a7-454d-a097-8f77d385889d","event_contact_id":"04d0c252-7b78-4d72-b408-df78841e3ddc","conversion_id":"81b23958-cde7-4882-a4ae-f0da6a95d6cb","event_type":"self_service_cancellation","amount":"-9.58","currency":"GBP","notes":"Business
155
+ Terminated Contract","event_date_time":"2018-07-16T10:41:14+00:00"}'
156
+ http_version:
157
+ recorded_at: Mon, 16 Jul 2018 10:41:14 GMT
158
+ recorded_with: VCR 3.0.3