active_currency 1.4.1 → 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 +4 -4
- data/README.md +25 -18
- data/lib/active_currency/bank.rb +1 -1
- data/lib/active_currency/cacheable_store.rb +3 -0
- data/lib/active_currency/configuration.rb +7 -1
- data/lib/active_currency/rate_store.rb +10 -0
- data/lib/active_currency/version.rb +1 -1
- metadata +4 -158
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3233f3254b0a5d585e52dd2626806810fb279b294555c30b405ca3b91fd1885e
|
|
4
|
+
data.tar.gz: 0427642f2c813ca73a5a9b9f67f68f7722b46ef16bb389e8d0f7c414cf03c61f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6528a885950aace4431337927fe2fdbe195dca4c53e1997cd77a084ad236d44ef8aeb87eea82d8f3862df3752c59d129cf0ffeb184b07cd07b970ed218783507
|
|
7
|
+
data.tar.gz: 71836bbd7b241112ca65b9bc30e4a9bae2d9ea13bfe1aea97be2015dbdbb053b9198d5be59ce17fb75f5902f7762999d6df848e89d28445fc5cc7b44ca7d3b3f
|
data/README.md
CHANGED
|
@@ -33,15 +33,15 @@ ActiveCurrency::AddRates.call(currencies: %w[EUR USD])
|
|
|
33
33
|
You can then exchange money by using the Money gem helpers:
|
|
34
34
|
|
|
35
35
|
```rb
|
|
36
|
-
10.to_money(
|
|
36
|
+
10.to_money("EUR").exchange_to("USD").cents
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
If you need to look up the previous currency rates:
|
|
40
40
|
|
|
41
41
|
```rb
|
|
42
|
-
ActiveCurrency::Rate.value_for(
|
|
42
|
+
ActiveCurrency::Rate.value_for("EUR", "USD", 1.month.ago)
|
|
43
43
|
# => 1.151
|
|
44
|
-
ActiveCurrency::Rate.where(from:
|
|
44
|
+
ActiveCurrency::Rate.where(from: "EUR", to: "USD").pluck(:value)
|
|
45
45
|
# => [1.162, 1.162, 1.161, 1.161, 1.163, …]
|
|
46
46
|
```
|
|
47
47
|
|
|
@@ -88,7 +88,7 @@ add the following to your application’s initializers:
|
|
|
88
88
|
```rb
|
|
89
89
|
ActiveCurrency.configure do |config|
|
|
90
90
|
config.remote_bank = :open_exchange_rates
|
|
91
|
-
config.open_exchange_rates_app_id =
|
|
91
|
+
config.open_exchange_rates_app_id = "…"
|
|
92
92
|
end
|
|
93
93
|
```
|
|
94
94
|
|
|
@@ -101,16 +101,21 @@ You can provide any Money-compatible bank when calling
|
|
|
101
101
|
ActiveCurrency::AddRates.call(…, bank: …)
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
##
|
|
105
|
-
|
|
106
|
-
If you want to increase or decrease the currency rates by a given multiplier,
|
|
107
|
-
you can do so by setting the `multiplier` option:
|
|
104
|
+
## Configuration
|
|
108
105
|
|
|
109
106
|
```rb
|
|
110
107
|
ActiveCurrency.configure do |config|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
108
|
+
# Use the money-open-exchange-rates bank instead.
|
|
109
|
+
# config.remote_bank = :open_exchange_rates
|
|
110
|
+
# config.open_exchange_rates_app_id = "…"
|
|
111
|
+
|
|
112
|
+
# Disable `Rails.cache`.
|
|
113
|
+
# config.cache_enabled = false
|
|
114
|
+
|
|
115
|
+
# Increase or decrease the currency rates by a given multiplier.
|
|
116
|
+
# config.multiplier = {
|
|
117
|
+
# ["EUR", "USD"] => 1.01,
|
|
118
|
+
# }
|
|
114
119
|
end
|
|
115
120
|
```
|
|
116
121
|
|
|
@@ -124,8 +129,8 @@ For that, you can use a fake rate store in your `rails_helper.rb`:
|
|
|
124
129
|
```rb
|
|
125
130
|
MoneyRails.configure do |config|
|
|
126
131
|
rate_store = Money::RatesStore::Memory.new.tap do |store|
|
|
127
|
-
store.add_rate(
|
|
128
|
-
store.add_rate(
|
|
132
|
+
store.add_rate("USD", "EUR", 1.5)
|
|
133
|
+
store.add_rate("EUR", "USD", 0.67)
|
|
129
134
|
end
|
|
130
135
|
config.default_bank = Money::Bank::VariableExchange.new(rate_store)
|
|
131
136
|
end
|
|
@@ -156,8 +161,10 @@ Update `CHANGELOG.md`, update version in `lib/active_currency/version.rb`.
|
|
|
156
161
|
Then:
|
|
157
162
|
|
|
158
163
|
```sh
|
|
159
|
-
BUNDLE_GEMFILE=Gemfile-
|
|
160
|
-
BUNDLE_GEMFILE=Gemfile-rails7.
|
|
164
|
+
BUNDLE_GEMFILE=Gemfile-rails7.1 bundle update --all
|
|
165
|
+
BUNDLE_GEMFILE=Gemfile-rails7.2 bundle update --all
|
|
166
|
+
BUNDLE_GEMFILE=Gemfile-rails8.0 bundle update --all
|
|
167
|
+
BUNDLE_GEMFILE=Gemfile-rails8.1 bundle update --all
|
|
161
168
|
|
|
162
169
|
git add CHANGELOG.md lib/active_currency/version.rb Gemfile-rails*
|
|
163
170
|
git commit -m v`ruby -r./lib/active_currency/version <<< 'puts ActiveCurrency::VERSION'`
|
|
@@ -169,10 +176,10 @@ bin/rake release
|
|
|
169
176
|
The gem is available as open source under the terms of the [MIT License].
|
|
170
177
|
|
|
171
178
|
[money-rails]: https://github.com/RubyMoney/money-rails
|
|
172
|
-
[sidekiq-scheduler]: https://github.com/
|
|
179
|
+
[sidekiq-scheduler]: https://github.com/sidekiq-scheduler/sidekiq-scheduler
|
|
173
180
|
[whenever]: https://github.com/javan/whenever
|
|
174
181
|
[active_scheduler]: https://github.com/JustinAiken/active_scheduler
|
|
175
182
|
[eu_central_bank]: https://github.com/RubyMoney/eu_central_bank
|
|
176
183
|
[money-open-exchange-rates]: https://github.com/spk/money-open-exchange-rates
|
|
177
|
-
[on GitHub]: https://github.com/
|
|
178
|
-
[MIT License]:
|
|
184
|
+
[on GitHub]: https://github.com/RubyMoney/active_currency
|
|
185
|
+
[MIT License]: https://opensource.org/license/MIT
|
data/lib/active_currency/bank.rb
CHANGED
|
@@ -7,6 +7,7 @@ module ActiveCurrency
|
|
|
7
7
|
include AfterCommitEverywhere
|
|
8
8
|
|
|
9
9
|
def get_rate(from, to, date = nil)
|
|
10
|
+
return super unless ActiveCurrency.configuration.cache_enabled?
|
|
10
11
|
return super if date
|
|
11
12
|
|
|
12
13
|
Rails.cache.fetch(cache_key(from, to), expires_in: 1.hour) do
|
|
@@ -17,6 +18,8 @@ module ActiveCurrency
|
|
|
17
18
|
def add_rate(from, to, rate, date = nil)
|
|
18
19
|
super
|
|
19
20
|
|
|
21
|
+
return unless ActiveCurrency.configuration.cache_enabled?
|
|
22
|
+
|
|
20
23
|
after_commit do
|
|
21
24
|
Rails.cache.delete(cache_key(from, to))
|
|
22
25
|
end
|
|
@@ -6,10 +6,16 @@ module ActiveCurrency
|
|
|
6
6
|
@remote_bank = :eu_central_bank
|
|
7
7
|
@open_exchange_rates_app_id = nil
|
|
8
8
|
@multiplier = {}
|
|
9
|
+
@cache_enabled = true
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
attr_accessor :remote_bank,
|
|
12
13
|
:open_exchange_rates_app_id,
|
|
13
|
-
:multiplier
|
|
14
|
+
:multiplier,
|
|
15
|
+
:cache_enabled
|
|
16
|
+
|
|
17
|
+
def cache_enabled?
|
|
18
|
+
!!@cache_enabled
|
|
19
|
+
end
|
|
14
20
|
end
|
|
15
21
|
end
|
|
@@ -3,5 +3,15 @@
|
|
|
3
3
|
module ActiveCurrency
|
|
4
4
|
class RateStore < DatabaseStore
|
|
5
5
|
include CacheableStore
|
|
6
|
+
|
|
7
|
+
# Money::Bank::VariableExchange#marshal_load rebuilds the store with
|
|
8
|
+
# `store_info.shift.new(*store_info)`, so a store's #marshal_dump must
|
|
9
|
+
# return `[StoreClass, *constructor_args]`. RateStore takes no arguments,
|
|
10
|
+
# so returning `[self.class]` lets a bank backed by this store be
|
|
11
|
+
# marshaled -- for example when the configured default bank is cached
|
|
12
|
+
# under a Marshal-based cache/serializer.
|
|
13
|
+
def marshal_dump
|
|
14
|
+
[self.class]
|
|
15
|
+
end
|
|
6
16
|
end
|
|
7
17
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_currency
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sunny Ripert
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-07-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -66,160 +66,6 @@ dependencies:
|
|
|
66
66
|
- - ">="
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
68
|
version: 1.3.1
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: money-open-exchange-rates
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - ">="
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - ">="
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: sqlite3
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - ">="
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - ">="
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: rspec
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - ">="
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '0'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - ">="
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '0'
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: rspec-rails
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - ">="
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '0'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - ">="
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '0'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: rspec-github
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - ">="
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - ">="
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '0'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: rspec_junit_formatter
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - ">="
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: '0'
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - ">="
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: '0'
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: timecop
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - ">="
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '0'
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - ">="
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: '0'
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: pry
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - ">="
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: '0'
|
|
174
|
-
type: :development
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - ">="
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: '0'
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: rubocop
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - ">="
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: '0'
|
|
188
|
-
type: :development
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - ">="
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: '0'
|
|
195
|
-
- !ruby/object:Gem::Dependency
|
|
196
|
-
name: rubocop-rails
|
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
|
198
|
-
requirements:
|
|
199
|
-
- - ">="
|
|
200
|
-
- !ruby/object:Gem::Version
|
|
201
|
-
version: '0'
|
|
202
|
-
type: :development
|
|
203
|
-
prerelease: false
|
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
-
requirements:
|
|
206
|
-
- - ">="
|
|
207
|
-
- !ruby/object:Gem::Version
|
|
208
|
-
version: '0'
|
|
209
|
-
- !ruby/object:Gem::Dependency
|
|
210
|
-
name: rubocop-rspec
|
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
|
212
|
-
requirements:
|
|
213
|
-
- - ">="
|
|
214
|
-
- !ruby/object:Gem::Version
|
|
215
|
-
version: '0'
|
|
216
|
-
type: :development
|
|
217
|
-
prerelease: false
|
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
-
requirements:
|
|
220
|
-
- - ">="
|
|
221
|
-
- !ruby/object:Gem::Version
|
|
222
|
-
version: '0'
|
|
223
69
|
description: Store your currency.
|
|
224
70
|
email:
|
|
225
71
|
- sunny@sunfox.org
|
|
@@ -241,7 +87,7 @@ files:
|
|
|
241
87
|
- lib/active_currency/migration.rb
|
|
242
88
|
- lib/active_currency/rate_store.rb
|
|
243
89
|
- lib/active_currency/version.rb
|
|
244
|
-
homepage: https://github.com/
|
|
90
|
+
homepage: https://github.com/RubyMoney/active_currency
|
|
245
91
|
licenses:
|
|
246
92
|
- MIT
|
|
247
93
|
metadata:
|
|
@@ -261,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
261
107
|
- !ruby/object:Gem::Version
|
|
262
108
|
version: '0'
|
|
263
109
|
requirements: []
|
|
264
|
-
rubygems_version: 3.
|
|
110
|
+
rubygems_version: 3.5.22
|
|
265
111
|
signing_key:
|
|
266
112
|
specification_version: 4
|
|
267
113
|
summary: Rails plugin to store your currency regularly
|