money-open-exchange-rates 1.4.2 → 2.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 86f324ed978cde7c5b05b50a8fe3d1ce4740333874457c8776c9871b3fa9ee31
4
- data.tar.gz: ef5d0c06086d520f7a8816a69007b98d4741fb0063148ee0c66b9ec29a658b6d
3
+ metadata.gz: 7a04f2f4222945d437a7c84bfed72c8fbc36188644d00da13528a677eda9515a
4
+ data.tar.gz: eb7c523fb8d74a9573ea65f8779fa5a41748b477dbc6f7ca9ceef5cde50de59a
5
5
  SHA512:
6
- metadata.gz: 5361f382ab1462ae3c6b1a18e543c1dbe4d8d31f68278c460092d8fd93b65a9fd9070f290915a498b1b9bb10b2c6c6c6fb3bff356a90f0f0b75b12d296914990
7
- data.tar.gz: d85876e62c4f13ebe24c71a273cb6667e7a331707cd7f48e90393b1d620b51593ff03cc77bc24cac78075fd21983290d99cba5eb62bfdb3c2235d1b790669f8d
6
+ metadata.gz: 508710569f6c2ca135fc5f09047ab20137b5c6ed6e93496c4b02925bdcc85e6f6fbb0a31b7d959534e82649f1302e50a0f6a7e4c06106c8bfc41cc170ee9b1ae
7
+ data.tar.gz: f2dc857c17c69a5c4faec4bd432bdd3ff89091a24642715c56a0f1f99525118e3199653f1729d33227938ad6d3c943914405b893674be2258650cb65632371bb
data/History.md CHANGED
@@ -1,4 +1,14 @@
1
1
 
2
+ 2.0.0 / 2025-12-23
3
+ ==================
4
+
5
+ * BREAKING: Upgrade to money ~> 7.0
6
+ * BREAKING: Require Ruby >= 3.1
7
+ * Update monetize dependency to ~> 2.0
8
+ * Update CI to test Ruby 3.1, 3.2, 3.3, 3.4
9
+ * Remove support for Ruby 2.7, 3.0
10
+ * Update README with money 7.x default currency configuration
11
+
2
12
  1.4.2 / 2023-07-25
3
13
  ==================
4
14
 
data/README.md CHANGED
@@ -45,6 +45,9 @@ gem install money-open-exchange-rates
45
45
  ``` ruby
46
46
  require 'money/bank/open_exchange_rates_bank'
47
47
 
48
+ # Money 7.x requires explicit default currency configuration
49
+ Money.default_currency = Money::Currency.new('USD')
50
+
48
51
  # Memory store per default; for others just pass as argument a class like
49
52
  # explained in https://github.com/RubyMoney/money#exchange-rate-stores
50
53
  oxr = Money::Bank::OpenExchangeRatesBank.new(Money::RatesStore::Memory.new)
@@ -176,6 +179,9 @@ take some time (HTTP call) and can fail.
176
179
  ``` ruby
177
180
  require 'money/bank/open_exchange_rates_bank'
178
181
 
182
+ # Money 7.x requires explicit default currency configuration
183
+ Money.default_currency = Money::Currency.new('USD')
184
+
179
185
  OXR_CACHE_KEY = "#{Rails.env}:money:exchange_rates".freeze
180
186
  # ExchangeRate is an ActiveRecord model
181
187
  # more info at https://github.com/RubyMoney/money#exchange-rate-stores
@@ -270,7 +270,7 @@ class Money
270
270
  str = "#{str}&base=#{source}" unless source == OE_SOURCE
271
271
  str = "#{str}&show_alternative=#{show_alternative}"
272
272
  str = "#{str}&prettyprint=#{prettyprint}"
273
- str = "#{str}&symbols=#{symbols.join(',')}" if symbols&.is_a?(Array)
273
+ str = "#{str}&symbols=#{symbols.join(',')}" if symbols.is_a?(Array)
274
274
  str
275
275
  end
276
276
 
@@ -324,9 +324,7 @@ class Money
324
324
  if cache.is_a?(Proc)
325
325
  cache.call(text)
326
326
  elsif cache.is_a?(String) || cache.is_a?(Pathname)
327
- File.open(cache.to_s, 'w') do |f|
328
- f.write(text)
329
- end
327
+ File.write(cache.to_s, text)
330
328
  else
331
329
  raise InvalidCache
332
330
  end
@@ -373,7 +371,7 @@ class Money
373
371
  return false unless text
374
372
 
375
373
  parsed = JSON.parse(text)
376
- parsed&.key?(RATES_KEY) && parsed&.key?(TIMESTAMP_KEY)
374
+ parsed&.key?(RATES_KEY) && parsed.key?(TIMESTAMP_KEY)
377
375
  rescue JSON::ParserError
378
376
  false
379
377
  end
@@ -383,9 +381,7 @@ class Money
383
381
  # @return [Hash] key is country code (ISO 3166-1 alpha-3) value Float
384
382
  def exchange_rates
385
383
  doc = JSON.parse(read_from_cache || read_from_url)
386
- if doc['error'] && ERROR_MAP.key?(doc['message'].to_sym)
387
- raise ERROR_MAP[doc['message'].to_sym]
388
- end
384
+ raise ERROR_MAP[doc['message'].to_sym] if doc['error'] && ERROR_MAP.key?(doc['message'].to_sym)
389
385
 
390
386
  self.rates_timestamp = doc[TIMESTAMP_KEY]
391
387
  @oer_rates = doc[RATES_KEY]
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Module for version constant
4
4
  module OpenExchangeRatesBank
5
- VERSION = '1.4.2'
5
+ VERSION = '2.0.0'
6
6
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- gem 'money', '~> 6.7'
5
+ gem 'money', '~> 7.0'
6
6
  gem 'money-open-exchange-rates', path: '../../'
@@ -3,10 +3,13 @@
3
3
  require 'json'
4
4
  require 'money/bank/open_exchange_rates_bank'
5
5
 
6
+ # Money 7.x requires explicit default currency configuration
7
+ Money.default_currency = Money::Currency.new('USD')
8
+
6
9
  ERROR_MSG = 'Integration test failed!'
7
10
  cache_path = '/tmp/latest.json'
8
11
  to_currency = 'CAD'
9
- app_id = ENV['OXR_APP_ID']
12
+ app_id = ENV.fetch('OXR_APP_ID', nil)
10
13
 
11
14
  if app_id.nil? || app_id.empty?
12
15
  puts 'OXR_APP_ID env var not set skipping integration tests'
@@ -29,10 +32,8 @@ begin
29
32
  json_to_currency = JSON.parse(File.read(cache_path))['rates'][to_currency]
30
33
  puts 'JSON to_currency', json_to_currency
31
34
  puts 'Money to_currency', cad_rate
32
- # rubocop:disable Style/AndOr
33
35
  json_to_currency == cad_rate or raise ERROR_MSG
34
- # rubocop:enable Style/AndOr
35
- # rubocop:disable Style/RescueStandardError
36
+ # rubocop:disable Style/RescueStandardError
36
37
  rescue
37
38
  # rubocop:enable Style/RescueStandardError
38
39
  raise ERROR_MSG
@@ -117,7 +117,7 @@ describe Money::Bank::OpenExchangeRatesBank do
117
117
  end
118
118
 
119
119
  it 'should update itself with exchange rates from OpenExchangeRates' do
120
- subject.oer_rates.keys.each do |currency|
120
+ subject.oer_rates.each_key do |currency|
121
121
  next unless Money::Currency.find(currency)
122
122
 
123
123
  _(subject.get_rate('USD', currency)).must_be :>, 0
@@ -316,21 +316,21 @@ describe Money::Bank::OpenExchangeRatesBank do
316
316
  initial_size = File.read(temp_cache_path).size
317
317
  subject.stubs(:api_response).returns ''
318
318
  subject.refresh_rates
319
- _(File.open(temp_cache_path).read.size).must_equal initial_size
319
+ _(File.read(temp_cache_path).size).must_equal initial_size
320
320
  end
321
321
 
322
322
  it 'should not break an existing file if save returns json without rates' do
323
323
  initial_size = File.read(temp_cache_path).size
324
324
  subject.stubs(:api_response).returns '{"error": "An error"}'
325
325
  subject.refresh_rates
326
- _(File.open(temp_cache_path).read.size).must_equal initial_size
326
+ _(File.read(temp_cache_path).size).must_equal initial_size
327
327
  end
328
328
 
329
329
  it 'should not break an existing file if save returns a invalid json' do
330
330
  initial_size = File.read(temp_cache_path).size
331
331
  subject.stubs(:api_response).returns '{invalid_json: "An error"}'
332
332
  subject.refresh_rates
333
- _(File.open(temp_cache_path).read.size).must_equal initial_size
333
+ _(File.read(temp_cache_path).size).must_equal initial_size
334
334
  end
335
335
  end
336
336
 
data/test/test_helper.rb CHANGED
@@ -7,6 +7,7 @@ rescue LoadError
7
7
  warn 'simplecov not loaded'
8
8
  end
9
9
 
10
+ require 'minitest/unit'
10
11
  require 'minitest/autorun'
11
12
  require 'mocha/minitest'
12
13
  require 'webmock/minitest'
@@ -14,6 +15,9 @@ require 'money/bank/open_exchange_rates_bank'
14
15
  require 'monetize'
15
16
  require 'timecop'
16
17
 
18
+ # Money 7.x requires explicit default currency configuration
19
+ Money.default_currency = Money::Currency.new('USD')
20
+
17
21
  TEST_APP_ID = 'TEST_APP_ID'
18
22
 
19
23
  def data_file(file)
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: money-open-exchange-rates
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent Arnoud
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-07-25 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: money
@@ -16,14 +15,28 @@ dependencies:
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: '6.12'
18
+ version: '7.0'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: '6.12'
25
+ version: '7.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: ostruct
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.6'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.6'
27
40
  - !ruby/object:Gem::Dependency
28
41
  name: minitest
29
42
  requirement: !ruby/object:Gem::Requirement
@@ -56,22 +69,16 @@ dependencies:
56
69
  name: monetize
57
70
  requirement: !ruby/object:Gem::Requirement
58
71
  requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: 1.3.1
62
- - - "<"
72
+ - - "~>"
63
73
  - !ruby/object:Gem::Version
64
- version: '2'
74
+ version: '2.0'
65
75
  type: :development
66
76
  prerelease: false
67
77
  version_requirements: !ruby/object:Gem::Requirement
68
78
  requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- version: 1.3.1
72
- - - "<"
79
+ - - "~>"
73
80
  - !ruby/object:Gem::Version
74
- version: '2'
81
+ version: '2.0'
75
82
  - !ruby/object:Gem::Dependency
76
83
  name: rake
77
84
  requirement: !ruby/object:Gem::Requirement
@@ -92,14 +99,14 @@ dependencies:
92
99
  requirements:
93
100
  - - "~>"
94
101
  - !ruby/object:Gem::Version
95
- version: 0.76.0
102
+ version: '1.69'
96
103
  type: :development
97
104
  prerelease: false
98
105
  version_requirements: !ruby/object:Gem::Requirement
99
106
  requirements:
100
107
  - - "~>"
101
108
  - !ruby/object:Gem::Version
102
- version: 0.76.0
109
+ version: '1.69'
103
110
  - !ruby/object:Gem::Dependency
104
111
  name: timecop
105
112
  requirement: !ruby/object:Gem::Requirement
@@ -154,8 +161,8 @@ files:
154
161
  homepage: http://github.com/spk/money-open-exchange-rates
155
162
  licenses:
156
163
  - MIT
157
- metadata: {}
158
- post_install_message:
164
+ metadata:
165
+ rubygems_mfa_required: 'true'
159
166
  rdoc_options: []
160
167
  require_paths:
161
168
  - lib
@@ -163,16 +170,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
163
170
  requirements:
164
171
  - - ">="
165
172
  - !ruby/object:Gem::Version
166
- version: '2.6'
173
+ version: '3.1'
167
174
  required_rubygems_version: !ruby/object:Gem::Requirement
168
175
  requirements:
169
176
  - - ">="
170
177
  - !ruby/object:Gem::Version
171
178
  version: '0'
172
179
  requirements: []
173
- rubygems_version: 3.3.15
174
- signing_key:
180
+ rubygems_version: 3.6.7
175
181
  specification_version: 4
176
182
  summary: A gem that calculates the exchange rate using published rates from open-exchange-rates.
177
- test_files:
178
- - test/open_exchange_rates_bank_test.rb
183
+ test_files: []