active_currency 1.0.2 → 1.1.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 +31 -9
- data/lib/active_currency/add_rates.rb +20 -14
- data/lib/active_currency/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: deaf57273ac8a06081edea671655192a53a560f5b4d2573818e1b3998d892f94
|
4
|
+
data.tar.gz: 78a851b36ae4a92fda99e8dd768685b0e5627069e75bbc07b349154823549c61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 502199ad5fa78e5b7710ef17e82de1e1f9e3ff68758a9193321c15524c636b2bec34c7f9839079122693f9c3044821aec37e862745279dbe34d9c2e45e97dfeb
|
7
|
+
data.tar.gz: 1f733721568ddacbc5a99335b761dee893191415a147c6639c0996f6d95a3df6fb373eebae298260906ddf704dbe9b3be0120857d845b9aa88ef0719ae06ca0e
|
data/README.md
CHANGED
@@ -14,12 +14,13 @@ provides the following advantages:
|
|
14
14
|
any given time.
|
15
15
|
- Does not need to call an API to get the rates when starting or restarting
|
16
16
|
your web server.
|
17
|
+
- Does not depend on the file system to store cached rates.
|
17
18
|
- Choose how often you want to update the currency rates (daily for example).
|
18
19
|
- Your users do not suffer the cost of making calls to the bank rates API.
|
19
20
|
- Your app does not go down when the bank rates API does.
|
20
21
|
|
21
|
-
To fetch the
|
22
|
-
|
22
|
+
To fetch the *current* rate it uses your application cache instead of making
|
23
|
+
a call to the database.
|
23
24
|
|
24
25
|
## Usage
|
25
26
|
|
@@ -66,6 +67,23 @@ end
|
|
66
67
|
Then call `bin/rake db:migrate` to create the table that holds
|
67
68
|
the currency rates and fill it for the first time.
|
68
69
|
|
70
|
+
## Fetching rates
|
71
|
+
|
72
|
+
By defaut it uses the [eu_central_bank] to update the currency rates.
|
73
|
+
|
74
|
+
If you prefer another API, you can provide any Money-compatible bank when
|
75
|
+
calling `ActiveCurrency::AddRates`. For example with the
|
76
|
+
[money-open-exchange-rates] gem:
|
77
|
+
|
78
|
+
```rb
|
79
|
+
require 'money/bank/open_exchange_rates_bank'
|
80
|
+
|
81
|
+
bank = Money::Bank::OpenExchangeRatesBank.new(Money::RatesStore::Memory.new)
|
82
|
+
bank.app_id = '…'
|
83
|
+
|
84
|
+
ActiveCurrency::AddRates.call(%w[EUR USD], bank: bank)
|
85
|
+
```
|
86
|
+
|
69
87
|
## Tests
|
70
88
|
|
71
89
|
In your app test suite you may not want to have to fill your database to be
|
@@ -93,13 +111,13 @@ Please file issues and pull requests
|
|
93
111
|
Install:
|
94
112
|
|
95
113
|
```sh
|
96
|
-
BUNDLE_GEMFILE=Gemfile-
|
114
|
+
BUNDLE_GEMFILE=Gemfile-rails6.0 bundle install
|
97
115
|
```
|
98
116
|
|
99
117
|
Launch specs and linters:
|
100
118
|
|
101
119
|
```sh
|
102
|
-
BUNDLE_GEMFILE=Gemfile-
|
120
|
+
BUNDLE_GEMFILE=Gemfile-rails6.0 bin/rake
|
103
121
|
```
|
104
122
|
|
105
123
|
## Release
|
@@ -109,13 +127,16 @@ Update `CHANGELOG.md`, update version in `lib/active_currency/version.rb`.
|
|
109
127
|
Then:
|
110
128
|
|
111
129
|
```sh
|
112
|
-
|
113
|
-
BUNDLE_GEMFILE=Gemfile-
|
114
|
-
BUNDLE_GEMFILE=Gemfile-
|
115
|
-
|
130
|
+
gem install bundler:1.17.2
|
131
|
+
BUNDLE_GEMFILE=Gemfile-rails3.2 bundle update active_currency
|
132
|
+
BUNDLE_GEMFILE=Gemfile-rails4.2 bundle update active_currency
|
133
|
+
|
134
|
+
gem install bundler:2.1.2
|
135
|
+
BUNDLE_GEMFILE=Gemfile-rails5.2 bundle update active_currency
|
136
|
+
BUNDLE_GEMFILE=Gemfile-rails6.0 bundle update active_currency
|
116
137
|
|
117
138
|
git add CHANGELOG.md lib/active_currency/version.rb Gemfile-rails*.lock
|
118
|
-
git commit -m
|
139
|
+
git commit -m v`ruby -r./lib/active_currency/version <<< 'puts ActiveCurrency::VERSION'`
|
119
140
|
bin/rake release
|
120
141
|
```
|
121
142
|
|
@@ -125,3 +146,4 @@ The gem is available as open source under the terms of the
|
|
125
146
|
[MIT License](http://opensource.org/licenses/MIT).
|
126
147
|
|
127
148
|
[eu_central_bank]: https://github.com/RubyMoney/eu_central_bank
|
149
|
+
[money-open-exchange-rates]: https://github.com/spk/money-open-exchange-rates
|
@@ -3,51 +3,57 @@
|
|
3
3
|
module ActiveCurrency
|
4
4
|
# Store the latest currency rates.
|
5
5
|
class AddRates
|
6
|
-
def initialize(currencies)
|
6
|
+
def initialize(currencies, bank: EuCentralBank.new)
|
7
7
|
@currencies = currencies
|
8
|
+
@bank = bank
|
8
9
|
end
|
9
10
|
|
10
11
|
def call
|
12
|
+
bank.update_rates
|
13
|
+
|
11
14
|
other_currencies.each do |to|
|
12
|
-
store_rate(
|
15
|
+
store_rate(to)
|
13
16
|
end
|
14
17
|
end
|
15
18
|
|
16
|
-
def self.call(currencies)
|
17
|
-
new(currencies).call
|
19
|
+
def self.call(currencies, *options)
|
20
|
+
new(currencies, *options).call
|
18
21
|
end
|
19
22
|
|
20
23
|
private
|
21
24
|
|
25
|
+
attr_accessor :bank
|
26
|
+
|
22
27
|
def currencies
|
23
28
|
@currencies.map(&:to_s).map(&:upcase)
|
24
29
|
end
|
25
30
|
|
26
31
|
def other_currencies
|
27
|
-
currencies
|
32
|
+
currencies.drop(1)
|
28
33
|
end
|
29
34
|
|
30
35
|
def from
|
31
|
-
|
36
|
+
@from ||= currencies.first
|
32
37
|
end
|
33
38
|
|
34
39
|
def store
|
35
40
|
@store ||= ActiveCurrency::RateStore.new
|
36
41
|
end
|
37
42
|
|
38
|
-
def
|
39
|
-
|
43
|
+
def store_rate(to)
|
44
|
+
rate, inverse = get_rates(to)
|
45
|
+
|
46
|
+
store.add_rate(from, to, rate)
|
47
|
+
store.add_rate(to, from, inverse)
|
40
48
|
end
|
41
49
|
|
42
|
-
def
|
50
|
+
def get_rates(to)
|
43
51
|
rate = bank.get_rate(from, to)
|
52
|
+
raise "Unknown rate between #{from} and #{to}" if rate.nil? || rate.zero?
|
44
53
|
|
45
|
-
|
46
|
-
raise "Bank rate must be set but bank returned #{rate.inpsect}"
|
47
|
-
end
|
54
|
+
inverse = bank.get_rate(to, from) || 1.fdiv(rate)
|
48
55
|
|
49
|
-
|
50
|
-
store.add_rate(to, from, 1.fdiv(rate))
|
56
|
+
[rate, inverse]
|
51
57
|
end
|
52
58
|
end
|
53
59
|
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: 1.0
|
4
|
+
version: 1.1.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: 2019-
|
11
|
+
date: 2019-12-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: sqlite3
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec-rails
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|