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.
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