money-currencylayer-bank 0.5.6 → 0.5.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 1c58b847f58a4da11d4bfdfd066f7c65625c57d2
4
- data.tar.gz: d884b37270fe5f08ffb648f80c17bb84401055ea
2
+ SHA256:
3
+ metadata.gz: a0e462c6afb508bf3a7a341b1351bf78a352b02bd89284fd58176bb3b86386af
4
+ data.tar.gz: 4fbeb9c78cd4074c337d77bb46aac04bfbcc1c1dead7f42526b2425992894789
5
5
  SHA512:
6
- metadata.gz: aebe22de9b59459bc297b49e56dbbe534a1561f99405d61a748aeff8e718f0e2071803a1c7467b7017ea900380524766e4c9b1e538e8de53feb37a67196937a3
7
- data.tar.gz: 9ea3e16fa4997a7ae4b15d3f3c6b28992e9f7c6247155942f1269c6343a019975884048bd1b7cb64b8c2682bb40cfbead6035097fb85e028896ea47d339936f2
6
+ metadata.gz: 70dd5e637e689c64116a462a3d51b4bcb15606266c7c3a390d4ef2f92c8dfe1c3dd2f88d578a94bd27617765efbfb947f0026e85c08dc9978ae9a8e8edf6eacb
7
+ data.tar.gz: 1797e477c6c164f3e4d08baf209c2f731c63a7fdf3e8db656227d6bc9d7011816047c5ef20506d9683d0d6816c9428fec785776a709eb6e26b4b5d59ea734af1
data/README.md CHANGED
@@ -3,9 +3,8 @@
3
3
  [![Gem Version](https://badge.fury.io/rb/money-currencylayer-bank.svg)](https://rubygems.org/gems/money-currencylayer-bank)
4
4
  [![Gem](https://img.shields.io/gem/dt/money-currencylayer-bank.svg?maxAge=2592000)](https://rubygems.org/gems/money-currencylayer-bank)
5
5
  [![Build Status](https://secure.travis-ci.org/phlegx/money-currencylayer-bank.svg?branch=master)](https://travis-ci.org/phlegx/money-currencylayer-bank)
6
- [![Code Climate](http://img.shields.io/codeclimate/github/phlegx/money-currencylayer-bank.svg)](https://codeclimate.com/github/phlegx/money-currencylayer-bank)
7
- [![Inline Docs](http://inch-ci.org/github/phlegx/money-currencylayer-bank.svg?branch=master)](http://inch-ci.org/github/phlegx/money-currencylayer-bank)
8
- [![Dependency Status](https://gemnasium.com/phlegx/money-currencylayer-bank.svg)](https://gemnasium.com/phlegx/money-currencylayer-bank)
6
+ [![Code Climate](https://codeclimate.com/github/phlegx/money-currencylayer-bank.svg)](https://codeclimate.com/github/phlegx/money-currencylayer-bank)
7
+ [![Inline Docs](https://inch-ci.org/github/phlegx/money-currencylayer-bank.svg?branch=master)](http://inch-ci.org/github/phlegx/money-currencylayer-bank)
9
8
  [![License](https://img.shields.io/github/license/phlegx/money-currencylayer-bank.svg)](http://opensource.org/licenses/MIT)
10
9
 
11
10
  A gem that calculates the exchange rate using published rates from
@@ -61,36 +60,41 @@ Or install it yourself as:
61
60
  ## Usage
62
61
 
63
62
  ~~~ ruby
64
- # Minimal requirements
63
+ # Minimal requirements.
65
64
  require 'money/bank/currencylayer_bank'
66
65
  mclb = Money::Bank::CurrencylayerBank.new
67
66
  mclb.access_key = 'your access_key from https://currencylayer.com/product'
68
67
 
69
- # Update rates (get new rates from remote if expired or access rates from cache)
70
- mclb.update_rates
71
-
72
- # Force update rates from remote and store in cache
73
- # mclb.update_rates(true)
74
-
75
68
  # (optional)
76
69
  # Set the base currency for all rates. By default, USD is used.
77
70
  # CurrencylayerBank only allows USD as base currency for the free plan users.
78
71
  mclb.source = 'EUR'
79
72
 
80
73
  # (optional)
81
- # Set the seconds after than the current rates are automatically expired
82
- # by default, they never expire, in this example 1 day.
74
+ # Set the seconds after than the current rates are automatically expired.
75
+ # By default, they never expire, in this example 1 day.
83
76
  mclb.ttl_in_seconds = 86400
84
77
 
85
78
  # (optional)
86
- # Use https to fetch rates from CurrencylayerBank
79
+ # Use https to fetch rates from CurrencylayerBank.
87
80
  # CurrencylayerBank only allows http as connection for the free plan users.
88
81
  mclb.secure_connection = true
89
82
 
90
- # Define cache (string or pathname)
83
+ # Define cache (string or pathname).
91
84
  mclb.cache = 'path/to/file/cache'
92
85
 
93
- # Set money default bank to Currencylayer bank
86
+ # Update rates (get new rates from remote if expired or access rates from cache).
87
+ # Be sure to define the cache first before updating the rates.
88
+ mclb.update_rates
89
+
90
+ # Force update rates from remote and store in cache.
91
+ # Be sure to define the cache first before updating the rates.
92
+ # mclb.update_rates(true)
93
+
94
+ # Set money rounding mode.
95
+ Money.rounding_mode = BigDecimal::ROUND_HALF_EVEN
96
+
97
+ # Set money default bank to Currencylayer bank.
94
98
  Money.default_bank = mclb
95
99
  ~~~
96
100
 
@@ -212,4 +216,4 @@ bundle exec rake
212
216
 
213
217
  The MIT License
214
218
 
215
- Copyright (c) 2017 Phlegx Systems OG
219
+ Copyright (c) 2022 Phlegx Systems OG
@@ -31,7 +31,7 @@ class Money
31
31
  # CurrencylayerBank base class
32
32
  class CurrencylayerBank < Money::Bank::VariableExchange
33
33
  # CurrencylayerBank url
34
- CL_URL = 'http://apilayer.net/api/live'.freeze
34
+ CL_URL = 'https://api.currencylayer.com/live'.freeze
35
35
  # CurrencylayerBank secure url
36
36
  CL_SECURE_URL = CL_URL.sub('http:', 'https:')
37
37
  # Default base currency
@@ -240,7 +240,7 @@ class Money
240
240
  # Opens an url and reads the content
241
241
  # @return [String] unparsed JSON content
242
242
  def open_url
243
- open(source_url).read
243
+ URI.open(source_url).read
244
244
  rescue OpenURI::HTTPError
245
245
  ''
246
246
  end
@@ -268,11 +268,18 @@ class Money
268
268
  # @param straight [Boolean] true for straight, default is careful
269
269
  # @return [Hash] key is country code (ISO 3166-1 alpha-3) value Float
270
270
  def exchange_rates(straight = false)
271
- @rates = if straight
272
- raw_rates_straight['quotes']
273
- else
274
- raw_rates_careful['quotes']
275
- end
271
+ rates = if straight
272
+ raw_rates_straight
273
+ else
274
+ raw_rates_careful
275
+ end
276
+ if rates.key?('quotes')
277
+ @rates = rates['quotes']
278
+ elsif rates.key?('error')
279
+ raise Error, rates.dig('error', 'info')
280
+ else
281
+ raise Error, 'Unknown rates situation!'
282
+ end
276
283
  end
277
284
 
278
285
  # Get raw exchange rates from cache and then from url
@@ -4,6 +4,7 @@
4
4
  require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
5
5
 
6
6
  describe Money::Bank::CurrencylayerBank do
7
+ Money.rounding_mode = BigDecimal::ROUND_HALF_EVEN
7
8
  subject { Money::Bank::CurrencylayerBank.new }
8
9
  let(:url) { Money::Bank::CurrencylayerBank::CL_URL }
9
10
  let(:secure_url) { Money::Bank::CurrencylayerBank::CL_SECURE_URL }
@@ -30,12 +31,12 @@ describe Money::Bank::CurrencylayerBank do
30
31
  describe 'without rates' do
31
32
  it 'able to exchange a money to its own currency even without rates' do
32
33
  money = Money.new(0, 'USD')
33
- subject.exchange_with(money, 'USD').must_equal money
34
+ _(subject.exchange_with(money, 'USD')).must_equal money
34
35
  end
35
36
 
36
37
  it "raise if it can't find an exchange rate" do
37
38
  money = Money.new(0, 'USD')
38
- proc { subject.exchange_with(money, 'SSP') }
39
+ _(proc { subject.exchange_with(money, 'SSP') })
39
40
  .must_raise Money::Bank::UnknownRate
40
41
  end
41
42
  end
@@ -47,17 +48,17 @@ describe Money::Bank::CurrencylayerBank do
47
48
 
48
49
  it 'should be able to exchange money from USD to a known exchange rate' do
49
50
  money = Money.new(100, 'USD')
50
- subject.exchange_with(money, 'BBD').must_equal Money.new(200, 'BBD')
51
+ _(subject.exchange_with(money, 'BBD')).must_equal Money.new(200, 'BBD')
51
52
  end
52
53
 
53
54
  it 'should be able to exchange money from a known exchange rate to USD' do
54
55
  money = Money.new(200, 'BBD')
55
- subject.exchange_with(money, 'USD').must_equal Money.new(100, 'USD')
56
+ _(subject.exchange_with(money, 'USD')).must_equal Money.new(100, 'USD')
56
57
  end
57
58
 
58
59
  it "should raise if it can't find an exchange rate" do
59
60
  money = Money.new(0, 'USD')
60
- proc { subject.exchange_with(money, 'SSP') }
61
+ _(proc { subject.exchange_with(money, 'SSP') })
61
62
  .must_raise Money::Bank::UnknownRate
62
63
  end
63
64
  end
@@ -87,21 +88,21 @@ describe Money::Bank::CurrencylayerBank do
87
88
  initial_size = File.read(temp_cache_path).size
88
89
  stub(subject).open_url { '' }
89
90
  subject.update_rates
90
- File.read(temp_cache_path).size.must_equal initial_size
91
+ _(File.read(temp_cache_path).size).must_equal initial_size
91
92
  end
92
93
 
93
94
  it 'should not break an existing file if save returns json without rates' do
94
95
  initial_size = File.read(temp_cache_path).size
95
96
  stub(subject).open_url { '{ "error": "An error" }' }
96
97
  subject.update_rates
97
- File.read(temp_cache_path).size.must_equal initial_size
98
+ _(File.read(temp_cache_path).size).must_equal initial_size
98
99
  end
99
100
 
100
101
  it 'should not break an existing file if save returns a invalid json' do
101
102
  initial_size = File.read(temp_cache_path).size
102
103
  stub(subject).open_url { '{ invalid_json: "An error" }' }
103
104
  subject.update_rates
104
- File.read(temp_cache_path).size.must_equal initial_size
105
+ _(File.read(temp_cache_path).size).must_equal initial_size
105
106
  end
106
107
  end
107
108
 
@@ -114,7 +115,7 @@ describe Money::Bank::CurrencylayerBank do
114
115
 
115
116
  it 'should get from url' do
116
117
  subject.update_rates
117
- subject.rates.wont_be_empty
118
+ _(subject.rates).wont_be_empty
118
119
  end
119
120
  end
120
121
 
@@ -126,7 +127,7 @@ describe Money::Bank::CurrencylayerBank do
126
127
  end
127
128
 
128
129
  it 'should raise an error if invalid path is given' do
129
- proc { subject.update_rates }.must_raise Money::Bank::InvalidCache
130
+ _(proc { subject.update_rates }).must_raise Money::Bank::InvalidCache
130
131
  end
131
132
  end
132
133
 
@@ -146,16 +147,16 @@ describe Money::Bank::CurrencylayerBank do
146
147
  it 'should get from url normally' do
147
148
  stub(subject).source_url { data_path }
148
149
  subject.update_rates
149
- subject.rates.wont_be_empty
150
+ _(subject.rates).wont_be_empty
150
151
  end
151
152
 
152
153
  it 'should save from url and get from cache' do
153
154
  stub(subject).source_url { data_path }
154
155
  subject.update_rates
155
- @global_rates.wont_be_empty
156
+ _(@global_rates).wont_be_empty
156
157
  dont_allow(subject).source_url
157
158
  subject.update_rates
158
- subject.rates.wont_be_empty
159
+ _(subject.rates).wont_be_empty
159
160
  end
160
161
  end
161
162
 
@@ -163,23 +164,23 @@ describe Money::Bank::CurrencylayerBank do
163
164
  it "should use the non-secure http url if secure_connection isn't set" do
164
165
  subject.secure_connection = nil
165
166
  subject.access_key = TEST_ACCESS_KEY
166
- subject.source_url.must_equal "#{url}?source=#{source}&"\
167
+ _(subject.source_url).must_equal "#{url}?source=#{source}&"\
167
168
  "access_key=#{TEST_ACCESS_KEY}"
168
169
  end
169
170
 
170
171
  it 'should use the non-secure http url if secure_connection is false' do
171
172
  subject.secure_connection = false
172
173
  subject.access_key = TEST_ACCESS_KEY
173
- subject.source_url.must_equal "#{url}?source=#{source}&"\
174
+ _(subject.source_url).must_equal "#{url}?source=#{source}&"\
174
175
  "access_key=#{TEST_ACCESS_KEY}"
175
176
  end
176
177
 
177
178
  it 'should use the secure https url if secure_connection is set to true' do
178
179
  subject.secure_connection = true
179
180
  subject.access_key = TEST_ACCESS_KEY
180
- subject.source_url.must_equal "#{secure_url}?source=#{source}&"\
181
+ _(subject.source_url).must_equal "#{secure_url}?source=#{source}&"\
181
182
  "access_key=#{TEST_ACCESS_KEY}"
182
- subject.source_url.must_include 'https://'
183
+ _(subject.source_url).must_include 'https://'
183
184
  end
184
185
  end
185
186
 
@@ -214,7 +215,7 @@ describe Money::Bank::CurrencylayerBank do
214
215
  subject.add_rate('USD', 'WTF', 2)
215
216
  subject.add_rate('WTF', 'USD', 2)
216
217
  subject.exchange_with(5000.to_money('WTF'), 'USD').cents
217
- subject.exchange_with(5000.to_money('WTF'), 'USD').cents.wont_equal 0
218
+ _(subject.exchange_with(5000.to_money('WTF'), 'USD').cents).wont_equal 0
218
219
  end
219
220
  end
220
221
  end
@@ -226,7 +227,7 @@ describe Money::Bank::CurrencylayerBank do
226
227
  end
227
228
 
228
229
  it 'should raise an error if no access key is set' do
229
- proc { subject.update_rates }.must_raise Money::Bank::NoAccessKey
230
+ _(proc { subject.update_rates }).must_raise Money::Bank::NoAccessKey
230
231
  end
231
232
  end
232
233
 
@@ -250,11 +251,11 @@ describe Money::Bank::CurrencylayerBank do
250
251
  describe 'when the ttl has expired' do
251
252
  it 'should update the rates' do
252
253
  Timecop.freeze(subject.rates_timestamp + 1000) do
253
- subject.get_rate('USD', 'EUR').must_equal @old_usd_eur_rate
254
+ _(subject.get_rate('USD', 'EUR')).must_equal @old_usd_eur_rate
254
255
  end
255
256
  Timecop.freeze(subject.rates_timestamp + 1001) do
256
- subject.get_rate('USD', 'EUR').wont_equal @old_usd_eur_rate
257
- subject.get_rate('USD', 'EUR').must_equal @new_usd_eur_rate
257
+ _(subject.get_rate('USD', 'EUR')).wont_equal @old_usd_eur_rate
258
+ _(subject.get_rate('USD', 'EUR')).must_equal @new_usd_eur_rate
258
259
  end
259
260
  end
260
261
 
@@ -262,7 +263,7 @@ describe Money::Bank::CurrencylayerBank do
262
263
  Timecop.freeze(subject.rates_timestamp + 1001) do
263
264
  exp_time = subject.rates_timestamp + 1000
264
265
  subject.expire_rates!
265
- subject.rates_expiration.must_equal exp_time
266
+ _(subject.rates_expiration).must_equal exp_time
266
267
  end
267
268
  end
268
269
  end
@@ -272,7 +273,7 @@ describe Money::Bank::CurrencylayerBank do
272
273
  subject.update_rates
273
274
  exp_time = subject.rates_expiration
274
275
  subject.expire_rates!
275
- subject.rates_expiration.must_equal exp_time
276
+ _(subject.rates_expiration).must_equal exp_time
276
277
  end
277
278
  end
278
279
  end
@@ -291,12 +292,12 @@ describe Money::Bank::CurrencylayerBank do
291
292
  it 'should return 1970-01-01 datetime if no rates' do
292
293
  stub(subject).open_url { '' }
293
294
  subject.update_rates
294
- subject.rates_timestamp.must_equal Time.at(0)
295
+ _(subject.rates_timestamp).must_equal Time.at(0)
295
296
  end
296
297
 
297
298
  it 'should return a Time object' do
298
299
  subject.update_rates
299
- subject.rates_timestamp.class.must_equal Time
300
+ _(subject.rates_timestamp.class).must_equal Time
300
301
  end
301
302
  end
302
303
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money-currencylayer-bank
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.6
4
+ version: 0.5.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Egon Zemmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-04 00:00:00.000000000 Z
11
+ date: 2022-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: money
@@ -185,11 +185,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
185
  - !ruby/object:Gem::Version
186
186
  version: '0'
187
187
  requirements: []
188
- rubyforge_project:
189
- rubygems_version: 2.5.2
188
+ rubygems_version: 3.2.24
190
189
  signing_key:
191
190
  specification_version: 4
192
191
  summary: A gem that calculates the exchange rate using published rates from currencylayer.com.
193
192
  test_files:
194
193
  - test/currencylayer_bank_test.rb
195
- has_rdoc: