currency_cloud 0.7.2 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/currency_cloud.svg)](http://badge.fury.io/rb/currency_cloud) [![Build Status](https://travis-ci.org/CurrencyCloud/currencycloud-ruby.png?branch=master)](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
|