money-currencylayer-bank 0.5.6 → 0.5.9

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