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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -0
  3. data/.travis.yml +5 -2
  4. data/Gemfile +1 -0
  5. data/README.md +7 -7
  6. data/currency_cloud.gemspec +1 -0
  7. data/lib/currency_cloud.rb +1 -1
  8. data/lib/currency_cloud/actions.rb +8 -8
  9. data/lib/currency_cloud/actions/create.rb +1 -1
  10. data/lib/currency_cloud/actions/current.rb +1 -1
  11. data/lib/currency_cloud/actions/find.rb +8 -9
  12. data/lib/currency_cloud/actions/update.rb +1 -1
  13. data/lib/currency_cloud/beneficiary.rb +1 -1
  14. data/lib/currency_cloud/client.rb +2 -2
  15. data/lib/currency_cloud/errors/api_error.rb +2 -3
  16. data/lib/currency_cloud/errors/error_utils.rb +1 -1
  17. data/lib/currency_cloud/errors/general_error.rb +1 -3
  18. data/lib/currency_cloud/errors/unexpected_error.rb +3 -4
  19. data/lib/currency_cloud/rate.rb +4 -4
  20. data/lib/currency_cloud/reference.rb +7 -7
  21. data/lib/currency_cloud/request_handler.rb +10 -10
  22. data/lib/currency_cloud/resource.rb +7 -7
  23. data/lib/currency_cloud/resourceful_collection.rb +3 -3
  24. data/lib/currency_cloud/response_handler.rb +2 -5
  25. data/lib/currency_cloud/session.rb +9 -9
  26. data/lib/currency_cloud/version.rb +2 -2
  27. data/spec/currency_cloud/request_handler_spec.rb +8 -8
  28. data/spec/currency_cloud/resource_spec.rb +4 -4
  29. data/spec/currency_cloud_spec.rb +28 -36
  30. data/spec/integration/actions_spec.rb +27 -27
  31. data/spec/integration/authentication_spec.rb +2 -2
  32. data/spec/integration/errors_spec.rb +8 -9
  33. data/spec/integration/rates_spec.rb +1 -1
  34. data/spec/integration/reference_spec.rb +15 -15
  35. data/spec/integration/settlements_spec.rb +7 -8
  36. data/spec/spec_helper.rb +1 -1
  37. data/spec/support/vcr_cassettes/Actions/can_create.yml +1 -1
  38. data/spec/support/vcr_cassettes/Actions/can_current.yml +2 -2
  39. data/spec/support/vcr_cassettes/Actions/can_delete.yml +1 -1
  40. data/spec/support/vcr_cassettes/Actions/can_find.yml +1 -1
  41. data/spec/support/vcr_cassettes/Actions/can_first.yml +1 -1
  42. data/spec/support/vcr_cassettes/Actions/can_retrieve.yml +1 -1
  43. data/spec/support/vcr_cassettes/Actions/can_update.yml +1 -1
  44. data/spec/support/vcr_cassettes/Actions/can_use_currency_to_retrieve_balance.yml +1 -1
  45. data/spec/support/vcr_cassettes/Actions/can_validate_beneficiaries.yml +1 -1
  46. data/spec/support/vcr_cassettes/Authentication/can_be_closed.yml +2 -2
  47. data/spec/support/vcr_cassettes/Authentication/can_use_just_a_token.yml +1 -1
  48. data/spec/support/vcr_cassettes/Authentication/handles_session_timeout_error.yml +3 -3
  49. data/spec/support/vcr_cassettes/Authentication/happens_lazily.yml +1 -1
  50. data/spec/support/vcr_cassettes/Error/contains_full_details_for_api_error.yml +1 -1
  51. data/spec/support/vcr_cassettes/Error/is_raised_on_a_bad_request.yml +1 -1
  52. data/spec/support/vcr_cassettes/Error/is_raised_on_a_forbidden_request.yml +1 -1
  53. data/spec/support/vcr_cassettes/Error/is_raised_on_an_internal_server_error.yml +1 -1
  54. data/spec/support/vcr_cassettes/Error/is_raised_on_incorrect_authentication_details.yml +1 -1
  55. data/spec/support/vcr_cassettes/Error/is_raised_when_a_resource_is_not_found.yml +1 -1
  56. data/spec/support/vcr_cassettes/Error/is_raised_when_too_many_requests_have_been_issued.yml +1 -1
  57. data/spec/support/vcr_cassettes/Rates/can_find.yml +1 -1
  58. data/spec/support/vcr_cassettes/Rates/can_provided_detailed_rate.yml +1 -1
  59. data/spec/support/vcr_cassettes/Reference/can_retrieve_beneficiary_required_details.yml +1 -1
  60. data/spec/support/vcr_cassettes/Reference/can_retrieve_conversion_dates.yml +1 -1
  61. data/spec/support/vcr_cassettes/Reference/can_retrieve_currencies.yml +1 -1
  62. data/spec/support/vcr_cassettes/Reference/can_retrieve_settlement_accounts.yml +1 -1
  63. data/spec/support/vcr_cassettes/Settlements/can_add_conversion.yml +3 -3
  64. data/spec/support/vcr_cassettes/Settlements/can_release.yml +2 -2
  65. data/spec/support/vcr_cassettes/Settlements/can_remove_conversion.yml +2 -2
  66. data/spec/support/vcr_cassettes/Settlements/can_unrelease.yml +2 -2
  67. metadata +34 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 56244f4c79912b074416b099f75d2d8b6b64fae8
4
- data.tar.gz: 9e0a5976808d20873f383eface2acecb96a17554
3
+ metadata.gz: d03914430ce3008c972006bfdce468cc9d5247c4
4
+ data.tar.gz: 45a61b8743f130d88c690db610532deefec3e65c
5
5
  SHA512:
6
- metadata.gz: 8a46e98ba3b1f58a7ea720d6637fd90f9d000b898365fa47328b923d527ac1ff8ab164a326008489889e4d9ac7196a47365446e3e8cd1001fb7875358a909237
7
- data.tar.gz: 6d22fdca021e1c1eded5def2e69ae701fa77bdbf9b4c68ff0e2cf723203fbe6437b91e8b4d4d27b8f064e14a1d60f4d70db7e1f54cf7796ceefca9b999efe0d6
6
+ metadata.gz: 9fdf242df295a23bc62137212cc3ee8fed27806be15d0c20a50c1ba6b77c09f86bbeb368e1cd4793ac42df96ec6f50232a568ca13e0968943d26c8f8759c86b0
7
+ data.tar.gz: becd764f0a82a9582411705245d3699b5ca501a372f813618aeff8c7b2d98837a7b2ba43241db74bdccf093c17255b4ef73c0c127ce36537473ec4389e7c32a0
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ Metrics/LineLength:
2
+ Max: 120
3
+
4
+ Style/Documentation:
5
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,3 +1,4 @@
1
+ dist: trusty
1
2
  language: ruby
2
3
  script: bundle exec rspec
3
4
  cache: bundler
@@ -7,6 +8,8 @@ rvm:
7
8
  - 2.0.0
8
9
  - 2.1
9
10
  - 2.2
11
+ - 2.3.4
12
+ - 2.4.1
10
13
  - jruby-19mode
11
- - jruby-head
12
- - rbx-2
14
+ - jruby-9.1.5.0
15
+ - rbx-3.74
data/Gemfile CHANGED
@@ -2,5 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  gem 'sinatra'
4
4
  gem 'guard-rspec', require: false
5
+ gem 'guard', '2.12.6'
5
6
 
6
7
  gemspec
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
- # Currency Cloud
3
+ # Currencycloud
4
4
 
5
- This is the official Ruby SDK for v2 of Currency Cloud's API. Additional documentation
6
- for each API endpoint can be found at [connect.currencycloud.com][connect]. If you have any queries or you require support, please contact our implementation team at implementation@currencycloud.com.
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.thecurrencycloud.com/v2/authenticate/api
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 Currency Cloud support, including the full
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) 2015 Currency Cloud. See [LICENSE][license] for details.
144
+ Copyright (c) 2016 Currencycloud. See [LICENSE][license] for details.
145
145
 
146
- [connect]: https://connect.currencycloud.com/documentation/getting-started/introduction
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/
@@ -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")
@@ -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 "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"
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
@@ -2,7 +2,7 @@ module CurrencyCloud
2
2
  module Actions
3
3
  module Create
4
4
  def create(params = {})
5
- attrs = client.post("create", params)
5
+ attrs = client.post('create', params)
6
6
  new(attrs)
7
7
  end
8
8
  end
@@ -2,7 +2,7 @@ module CurrencyCloud
2
2
  module Actions
3
3
  module Current
4
4
  def current
5
- attrs = client.get("current")
5
+ attrs = client.get('current')
6
6
  new(attrs)
7
7
  end
8
8
  end
@@ -1,24 +1,23 @@
1
1
  module CurrencyCloud
2
2
  module Actions
3
-
4
3
  module Find
5
-
6
- def find(params={})
7
- response = client.get("find", params)
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?(self.resource.capitalize)
19
- CurrencyCloud.const_set(self.resource.capitalize, Class.new(CurrencyCloud::ResourcefulCollection))
17
+ unless CurrencyCloud.const_defined?(resource.capitalize)
18
+ CurrencyCloud.const_set(resource.capitalize, Class.new(CurrencyCloud::ResourcefulCollection))
20
19
  end
21
- CurrencyCloud.const_get(self.resource.capitalize)
20
+ CurrencyCloud.const_get(resource.capitalize)
22
21
  end
23
22
  end
24
23
  end
@@ -8,7 +8,7 @@ module CurrencyCloud
8
8
  # TODO: Add .save instance method, which calls update on changed attributes
9
9
 
10
10
  def update(id, params)
11
- attrs = client.post("#{id}", params)
11
+ attrs = client.post(id.to_s, params)
12
12
  new(attrs)
13
13
  end
14
14
  end
@@ -6,7 +6,7 @@ module CurrencyCloud
6
6
  actions :create, :retrieve, :find, :update, :delete
7
7
 
8
8
  def self.validate(params)
9
- new(client.post("validate", params))
9
+ new(client.post('validate', params))
10
10
  end
11
11
  end
12
12
  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
@@ -11,4 +11,4 @@ module CurrencyCloud
11
11
  "#{base}#{implementation}"
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -1,5 +1,3 @@
1
1
  module CurrencyCloud
2
-
3
2
  class GeneralError < StandardError; end
4
-
5
- end
3
+ 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
@@ -5,17 +5,17 @@ module CurrencyCloud
5
5
  resource :rates
6
6
 
7
7
  def self.find(params)
8
- response = client.get("find", params)
8
+ response = client.get('find', params)
9
9
 
10
- rates = response["rates"].map do |currency_pair, (bid, offer)|
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["unavailable"])
14
+ Rates.new(currencies: rates, unavailable: response['unavailable'])
15
15
  end
16
16
 
17
17
  def self.detailed(params)
18
- new(client.get("detailed", params))
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("currencies")
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("beneficiary_required_details", params)["details"]
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("conversion_dates", params)
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("settlement_accounts", params)
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, params, options|
11
- options.merge!(:query => params)
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, params, options|
18
- options.merge!(:body => params)
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(verb, opts)
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(verb, opts)
50
- options = {:headers => headers }
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.merge!(on_behalf_of: session.on_behalf_of)
58
+ params[:on_behalf_of] = session.on_behalf_of
59
59
  end
60
60
 
61
61
  params
@@ -1,5 +1,5 @@
1
- require "set"
2
- require_relative "./actions"
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
- set_accessors(valid_attributes)
15
+ self.accessors = valid_attributes
16
16
  end
17
17
 
18
18
  def inspect
19
- "#<#{self.class}:0x#{self.object_id.to_s(16)} #{@attributes.inspect}>"
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 set_accessors(attributes)
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
- self.class_eval do
69
+ class_eval do
70
70
  action_module = CurrencyCloud::Actions.const_get(action.to_s.capitalize)
71
- self.extend(action_module)
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
@@ -10,11 +10,8 @@ module CurrencyCloud
10
10
  end
11
11
 
12
12
  def process
13
- if success?
14
- return parsed_response
15
- else
16
- handle_failure
17
- end
13
+ return parsed_response if success?
14
+ handle_failure
18
15
  end
19
16
 
20
17
  private