currency_cloud 0.7.2 → 0.8.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/.travis.yml +5 -2
- data/Gemfile +1 -0
- data/README.md +7 -7
- data/currency_cloud.gemspec +1 -0
- data/lib/currency_cloud.rb +1 -1
- data/lib/currency_cloud/actions.rb +8 -8
- data/lib/currency_cloud/actions/create.rb +1 -1
- data/lib/currency_cloud/actions/current.rb +1 -1
- data/lib/currency_cloud/actions/find.rb +8 -9
- data/lib/currency_cloud/actions/update.rb +1 -1
- data/lib/currency_cloud/beneficiary.rb +1 -1
- data/lib/currency_cloud/client.rb +2 -2
- data/lib/currency_cloud/errors/api_error.rb +2 -3
- data/lib/currency_cloud/errors/error_utils.rb +1 -1
- data/lib/currency_cloud/errors/general_error.rb +1 -3
- data/lib/currency_cloud/errors/unexpected_error.rb +3 -4
- data/lib/currency_cloud/rate.rb +4 -4
- data/lib/currency_cloud/reference.rb +7 -7
- data/lib/currency_cloud/request_handler.rb +10 -10
- data/lib/currency_cloud/resource.rb +7 -7
- data/lib/currency_cloud/resourceful_collection.rb +3 -3
- data/lib/currency_cloud/response_handler.rb +2 -5
- data/lib/currency_cloud/session.rb +9 -9
- data/lib/currency_cloud/version.rb +2 -2
- data/spec/currency_cloud/request_handler_spec.rb +8 -8
- data/spec/currency_cloud/resource_spec.rb +4 -4
- data/spec/currency_cloud_spec.rb +28 -36
- data/spec/integration/actions_spec.rb +27 -27
- data/spec/integration/authentication_spec.rb +2 -2
- data/spec/integration/errors_spec.rb +8 -9
- data/spec/integration/rates_spec.rb +1 -1
- data/spec/integration/reference_spec.rb +15 -15
- data/spec/integration/settlements_spec.rb +7 -8
- data/spec/spec_helper.rb +1 -1
- data/spec/support/vcr_cassettes/Actions/can_create.yml +1 -1
- data/spec/support/vcr_cassettes/Actions/can_current.yml +2 -2
- data/spec/support/vcr_cassettes/Actions/can_delete.yml +1 -1
- data/spec/support/vcr_cassettes/Actions/can_find.yml +1 -1
- data/spec/support/vcr_cassettes/Actions/can_first.yml +1 -1
- data/spec/support/vcr_cassettes/Actions/can_retrieve.yml +1 -1
- data/spec/support/vcr_cassettes/Actions/can_update.yml +1 -1
- data/spec/support/vcr_cassettes/Actions/can_use_currency_to_retrieve_balance.yml +1 -1
- data/spec/support/vcr_cassettes/Actions/can_validate_beneficiaries.yml +1 -1
- data/spec/support/vcr_cassettes/Authentication/can_be_closed.yml +2 -2
- data/spec/support/vcr_cassettes/Authentication/can_use_just_a_token.yml +1 -1
- data/spec/support/vcr_cassettes/Authentication/handles_session_timeout_error.yml +3 -3
- data/spec/support/vcr_cassettes/Authentication/happens_lazily.yml +1 -1
- data/spec/support/vcr_cassettes/Error/contains_full_details_for_api_error.yml +1 -1
- data/spec/support/vcr_cassettes/Error/is_raised_on_a_bad_request.yml +1 -1
- data/spec/support/vcr_cassettes/Error/is_raised_on_a_forbidden_request.yml +1 -1
- data/spec/support/vcr_cassettes/Error/is_raised_on_an_internal_server_error.yml +1 -1
- data/spec/support/vcr_cassettes/Error/is_raised_on_incorrect_authentication_details.yml +1 -1
- data/spec/support/vcr_cassettes/Error/is_raised_when_a_resource_is_not_found.yml +1 -1
- data/spec/support/vcr_cassettes/Error/is_raised_when_too_many_requests_have_been_issued.yml +1 -1
- data/spec/support/vcr_cassettes/Rates/can_find.yml +1 -1
- data/spec/support/vcr_cassettes/Rates/can_provided_detailed_rate.yml +1 -1
- data/spec/support/vcr_cassettes/Reference/can_retrieve_beneficiary_required_details.yml +1 -1
- data/spec/support/vcr_cassettes/Reference/can_retrieve_conversion_dates.yml +1 -1
- data/spec/support/vcr_cassettes/Reference/can_retrieve_currencies.yml +1 -1
- data/spec/support/vcr_cassettes/Reference/can_retrieve_settlement_accounts.yml +1 -1
- data/spec/support/vcr_cassettes/Settlements/can_add_conversion.yml +3 -3
- data/spec/support/vcr_cassettes/Settlements/can_release.yml +2 -2
- data/spec/support/vcr_cassettes/Settlements/can_remove_conversion.yml +2 -2
- data/spec/support/vcr_cassettes/Settlements/can_unrelease.yml +2 -2
- metadata +34 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d03914430ce3008c972006bfdce468cc9d5247c4
|
4
|
+
data.tar.gz: 45a61b8743f130d88c690db610532deefec3e65c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9fdf242df295a23bc62137212cc3ee8fed27806be15d0c20a50c1ba6b77c09f86bbeb368e1cd4793ac42df96ec6f50232a568ca13e0968943d26c8f8759c86b0
|
7
|
+
data.tar.gz: becd764f0a82a9582411705245d3699b5ca501a372f813618aeff8c7b2d98837a7b2ba43241db74bdccf093c17255b4ef73c0c127ce36537473ec4389e7c32a0
|
data/.rubocop.yml
ADDED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
[](http://badge.fury.io/rb/currency_cloud) [](https://travis-ci.org/CurrencyCloud/currencycloud-ruby)
|
2
2
|
|
3
|
-
#
|
3
|
+
# Currencycloud
|
4
4
|
|
5
|
-
This is the official Ruby SDK for v2 of
|
6
|
-
for each API endpoint can be found at [
|
5
|
+
This is the official Ruby SDK for v2 of Currencycloud's API. Additional documentation
|
6
|
+
for each API endpoint can be found at [developer.currencycloud.com][developer]. If you have any queries or you require support, please contact our sales team at sales@currencycloud.com.
|
7
7
|
|
8
8
|
## Installation
|
9
9
|
|
@@ -93,7 +93,7 @@ request:
|
|
93
93
|
login_id: non-existent-login-id
|
94
94
|
api_key: ef0fd50fca1fb14c1fab3a8436b9ecb57528f0
|
95
95
|
verb: post
|
96
|
-
url: https://devapi.
|
96
|
+
url: https://devapi.currencycloud.com/v2/authenticate/api
|
97
97
|
response:
|
98
98
|
status_code: 400
|
99
99
|
date: Wed, 29 Apr 2015 22:46:53 GMT
|
@@ -121,7 +121,7 @@ The final section contains valuable information:
|
|
121
121
|
- Message: A human readable message that explains the error
|
122
122
|
- Params: A hash that contains dynamic parts of the error message for building custom error messages
|
123
123
|
|
124
|
-
When troubleshooting API calls with
|
124
|
+
When troubleshooting API calls with Currencycloud support, including the full
|
125
125
|
error in any correspondence can be very helpful.
|
126
126
|
|
127
127
|
# Development
|
@@ -141,9 +141,9 @@ to be backwards compatible.
|
|
141
141
|
|
142
142
|
# Copyright
|
143
143
|
|
144
|
-
Copyright (c)
|
144
|
+
Copyright (c) 2016 Currencycloud. See [LICENSE][license] for details.
|
145
145
|
|
146
|
-
[
|
146
|
+
[developer]: https://developer.currencycloud.com/documentation/getting-started/introduction/
|
147
147
|
[travis]: https://travis-ci.org/CurrencyCloud/currencycloud-ruby
|
148
148
|
[jruby]: http://jruby.org/
|
149
149
|
[rubinius]: http://rubini.us/
|
data/currency_cloud.gemspec
CHANGED
@@ -20,6 +20,7 @@ spec = Gem::Specification.new do |s|
|
|
20
20
|
s.add_development_dependency('rake', '~> 10.3')
|
21
21
|
s.add_development_dependency('webmock', '~> 1.21')
|
22
22
|
s.add_development_dependency('vcr', '~> 2.9')
|
23
|
+
s.add_development_dependency('addressable', '<= 2.4.0')
|
23
24
|
|
24
25
|
s.files = `git ls-files`.split("\n")
|
25
26
|
s.test_files = `git ls-files -- spec/*`.split("\n")
|
data/lib/currency_cloud.rb
CHANGED
@@ -5,7 +5,7 @@ require 'json'
|
|
5
5
|
require 'currency_cloud/resource'
|
6
6
|
require 'currency_cloud/errors/error_utils'
|
7
7
|
lib_path = File.join(File.dirname(__FILE__), '**/*.*')
|
8
|
-
Dir[lib_path].sort.each { |f| require f}
|
8
|
+
Dir[lib_path].sort.each { |f| require f }
|
9
9
|
|
10
10
|
module CurrencyCloud
|
11
11
|
UUID_REGEX = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require_relative
|
2
|
-
require_relative
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
6
|
-
require_relative
|
7
|
-
require_relative
|
8
|
-
require_relative
|
1
|
+
require_relative 'actions/create'
|
2
|
+
require_relative 'actions/current'
|
3
|
+
require_relative 'actions/delete'
|
4
|
+
require_relative 'actions/find'
|
5
|
+
require_relative 'actions/instance_delete'
|
6
|
+
require_relative 'actions/retrieve'
|
7
|
+
require_relative 'actions/save'
|
8
|
+
require_relative 'actions/update'
|
9
9
|
|
10
10
|
module CurrencyCloud
|
11
11
|
module Actions
|
@@ -1,24 +1,23 @@
|
|
1
1
|
module CurrencyCloud
|
2
2
|
module Actions
|
3
|
-
|
4
3
|
module Find
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
mixin_class.new(self.resource, self, response)
|
4
|
+
def find(params = {})
|
5
|
+
response = client.get('find', params)
|
6
|
+
mixin_class.new(resource, self, response)
|
9
7
|
end
|
10
8
|
|
11
|
-
def first(params={})
|
9
|
+
def first(params = {})
|
12
10
|
entities = find(params.merge(per_page: 1)) || []
|
13
11
|
entities.first
|
14
12
|
end
|
15
13
|
|
16
14
|
private
|
15
|
+
|
17
16
|
def mixin_class
|
18
|
-
unless CurrencyCloud.const_defined?(
|
19
|
-
CurrencyCloud.const_set(
|
17
|
+
unless CurrencyCloud.const_defined?(resource.capitalize)
|
18
|
+
CurrencyCloud.const_set(resource.capitalize, Class.new(CurrencyCloud::ResourcefulCollection))
|
20
19
|
end
|
21
|
-
CurrencyCloud.const_get(
|
20
|
+
CurrencyCloud.const_get(resource.capitalize)
|
22
21
|
end
|
23
22
|
end
|
24
23
|
end
|
@@ -4,11 +4,11 @@ module CurrencyCloud
|
|
4
4
|
@resource = resource
|
5
5
|
end
|
6
6
|
|
7
|
-
def get(url, params={})
|
7
|
+
def get(url, params = {})
|
8
8
|
request.get(build_url(url), params)
|
9
9
|
end
|
10
10
|
|
11
|
-
def post(url, params={})
|
11
|
+
def post(url, params = {})
|
12
12
|
request.post(build_url(url), params)
|
13
13
|
end
|
14
14
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module CurrencyCloud
|
2
2
|
class ApiErrorMessage
|
3
|
-
|
4
3
|
attr_reader :field, :code, :message, :params
|
5
4
|
|
6
5
|
def initialize(field, error)
|
@@ -45,7 +44,7 @@ module CurrencyCloud
|
|
45
44
|
def to_s
|
46
45
|
class_name = super
|
47
46
|
|
48
|
-
string_params = Hash[@params.map { |k, v| [k.to_s, v.to_s]}]
|
47
|
+
string_params = Hash[@params.map { |k, v| [k.to_s, v.to_s] }]
|
49
48
|
|
50
49
|
error_details = {
|
51
50
|
'platform' => platform,
|
@@ -71,4 +70,4 @@ module CurrencyCloud
|
|
71
70
|
class TooManyRequestsError < ApiError; end
|
72
71
|
class InternalApplicationError < ApiError; end
|
73
72
|
class NotFoundError < ApiError; end
|
74
|
-
end
|
73
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
module CurrencyCloud
|
2
|
-
|
3
2
|
class UnexpectedError < StandardError
|
4
3
|
include ErrorUtils
|
5
4
|
|
@@ -15,7 +14,7 @@ module CurrencyCloud
|
|
15
14
|
def to_s
|
16
15
|
class_name = super
|
17
16
|
|
18
|
-
string_params = Hash[@params.map { |k, v| [k.to_s, v.to_s]}]
|
17
|
+
string_params = Hash[@params.map { |k, v| [k.to_s, v.to_s] }]
|
19
18
|
|
20
19
|
error_details = {
|
21
20
|
'platform' => platform,
|
@@ -28,5 +27,5 @@ module CurrencyCloud
|
|
28
27
|
}
|
29
28
|
"#{class_name}#{$/}#{YAML.dump(error_details)}"
|
30
29
|
end
|
31
|
-
end
|
32
|
-
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/currency_cloud/rate.rb
CHANGED
@@ -5,17 +5,17 @@ module CurrencyCloud
|
|
5
5
|
resource :rates
|
6
6
|
|
7
7
|
def self.find(params)
|
8
|
-
response = client.get(
|
8
|
+
response = client.get('find', params)
|
9
9
|
|
10
|
-
rates = response[
|
10
|
+
rates = response['rates'].map do |currency_pair, (bid, offer)|
|
11
11
|
new(currency_pair: currency_pair, bid: bid, offer: offer)
|
12
12
|
end
|
13
13
|
|
14
|
-
Rates.new(currencies: rates, unavailable: response[
|
14
|
+
Rates.new(currencies: rates, unavailable: response['unavailable'])
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.detailed(params)
|
18
|
-
new(client.get(
|
18
|
+
new(client.get('detailed', params))
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -5,21 +5,21 @@ module CurrencyCloud
|
|
5
5
|
resource :reference
|
6
6
|
|
7
7
|
def self.currencies
|
8
|
-
response = client.get(
|
9
|
-
response['currencies'].map { |c| Currency.new(c)}
|
8
|
+
response = client.get('currencies')
|
9
|
+
response['currencies'].map { |c| Currency.new(c) }
|
10
10
|
end
|
11
11
|
|
12
|
-
def self.beneficiary_required_details(params={})
|
13
|
-
client.get(
|
12
|
+
def self.beneficiary_required_details(params = {})
|
13
|
+
client.get('beneficiary_required_details', params)['details']
|
14
14
|
end
|
15
15
|
|
16
16
|
def self.conversion_dates(params)
|
17
|
-
dates = client.get(
|
17
|
+
dates = client.get('conversion_dates', params)
|
18
18
|
ConversionDates.new(dates)
|
19
19
|
end
|
20
20
|
|
21
|
-
def self.settlement_accounts(params={})
|
22
|
-
response = client.get(
|
21
|
+
def self.settlement_accounts(params = {})
|
22
|
+
response = client.get('settlement_accounts', params)
|
23
23
|
response['settlement_accounts'].map { |s| SettlementAccount.new(s) }
|
24
24
|
end
|
25
25
|
end
|
@@ -6,16 +6,16 @@ module CurrencyCloud
|
|
6
6
|
@session = session
|
7
7
|
end
|
8
8
|
|
9
|
-
def get(route, params={}, opts={})
|
10
|
-
retry_authenticate('get', route, params, opts) do |url,
|
11
|
-
options
|
9
|
+
def get(route, params = {}, opts = {})
|
10
|
+
retry_authenticate('get', route, params, opts) do |url, new_params, options|
|
11
|
+
options[:query] = new_params
|
12
12
|
HTTParty.get(url, options)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def post(route, params={}, opts={})
|
17
|
-
retry_authenticate('post', route, params, opts) do |url,
|
18
|
-
options
|
16
|
+
def post(route, params = {}, opts = {})
|
17
|
+
retry_authenticate('post', route, params, opts) do |url, new_params, options|
|
18
|
+
options[:body] = new_params
|
19
19
|
HTTParty.post(url, options)
|
20
20
|
end
|
21
21
|
end
|
@@ -31,7 +31,7 @@ module CurrencyCloud
|
|
31
31
|
response = nil
|
32
32
|
retry_count = should_retry ? 0 : 2
|
33
33
|
while retry_count < 3
|
34
|
-
options = process_options(
|
34
|
+
options = process_options(opts)
|
35
35
|
response = yield(full_url, params, options)
|
36
36
|
break unless response.code == 401 && should_retry
|
37
37
|
session.reauthenticate
|
@@ -46,8 +46,8 @@ module CurrencyCloud
|
|
46
46
|
raise UnexpectedError.new(verb, full_url, params, e)
|
47
47
|
end
|
48
48
|
|
49
|
-
def process_options(
|
50
|
-
options = {:
|
49
|
+
def process_options(opts)
|
50
|
+
options = { headers: headers }
|
51
51
|
# options[:debug_output] = $stdout
|
52
52
|
options.merge(opts)
|
53
53
|
# options
|
@@ -55,7 +55,7 @@ module CurrencyCloud
|
|
55
55
|
|
56
56
|
def process_params(params)
|
57
57
|
if session && session.on_behalf_of && CurrencyCloud::UUID_REGEX.match(session.on_behalf_of)
|
58
|
-
params
|
58
|
+
params[:on_behalf_of] = session.on_behalf_of
|
59
59
|
end
|
60
60
|
|
61
61
|
params
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require_relative
|
1
|
+
require 'set'
|
2
|
+
require_relative './actions'
|
3
3
|
|
4
4
|
module CurrencyCloud
|
5
5
|
module Resource
|
@@ -12,11 +12,11 @@ module CurrencyCloud
|
|
12
12
|
def initialize(attributes)
|
13
13
|
@attributes = attributes
|
14
14
|
@changed_attributes = Set.new
|
15
|
-
|
15
|
+
self.accessors = valid_attributes
|
16
16
|
end
|
17
17
|
|
18
18
|
def inspect
|
19
|
-
"#<#{self.class}:0x#{
|
19
|
+
"#<#{self.class}:0x#{object_id.to_s(16)} #{@attributes.inspect}>"
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
@@ -47,7 +47,7 @@ module CurrencyCloud
|
|
47
47
|
class << self; self; end
|
48
48
|
end
|
49
49
|
|
50
|
-
def
|
50
|
+
def accessors=(attributes)
|
51
51
|
metaclass.instance_eval do
|
52
52
|
attributes.each do |attribute|
|
53
53
|
define_method(attribute) { @attributes[attribute] }
|
@@ -66,9 +66,9 @@ module CurrencyCloud
|
|
66
66
|
|
67
67
|
def actions(*actions)
|
68
68
|
actions.each do |action|
|
69
|
-
|
69
|
+
class_eval do
|
70
70
|
action_module = CurrencyCloud::Actions.const_get(action.to_s.capitalize)
|
71
|
-
|
71
|
+
extend(action_module)
|
72
72
|
end
|
73
73
|
end
|
74
74
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module CurrencyCloud
|
2
2
|
class ResourcefulCollection
|
3
3
|
include Enumerable
|
4
|
-
|
4
|
+
|
5
5
|
extend Forwardable
|
6
6
|
def_delegators :@collection, :[], :length, :empty?, :each
|
7
7
|
|
@@ -11,5 +11,5 @@ module CurrencyCloud
|
|
11
11
|
@collection = collection[resource.to_s].map { |object| klass.new(object) }
|
12
12
|
@pagination = Pagination.new(collection['pagination'])
|
13
13
|
end
|
14
|
-
end
|
15
|
-
end
|
14
|
+
end
|
15
|
+
end
|