money_persistent_bank 0.0.2 → 0.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.
- data/Changelog.md +1 -0
- data/Readme.md +34 -0
- data/lib/money/bank/persistent_bank.rb +8 -2
- data/lib/money_persistent_bank/version.rb +1 -1
- data/test/persistent_bank_test.rb +9 -3
- metadata +20 -7
data/Changelog.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.1.0. Update rates also when the rates are accessed directly: `bank.rates`
|
data/Readme.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Money Persistent Bank
|
|
2
|
+
|
|
3
|
+
["Money" gem][money] provides VariableExchange which is useful for converting money from one currency to another. This gem provides PersistentBank which can save rates to a local storage and automatically load from it in another place.
|
|
4
|
+
|
|
5
|
+
This can be useful in a Rails application. You fetch rates from external source once a day in a rake task and your running application picks up the new rates on the next request.
|
|
6
|
+
|
|
7
|
+
## Usage in Rails
|
|
8
|
+
|
|
9
|
+
Add it to your gemfile:
|
|
10
|
+
|
|
11
|
+
gem "persistent_bank", "~> 0.1.0"
|
|
12
|
+
|
|
13
|
+
Now you can use it in a rake task.
|
|
14
|
+
|
|
15
|
+
task :fetch_rates => :environment do
|
|
16
|
+
bank = Money::Bank::PersistentBank.instance
|
|
17
|
+
|
|
18
|
+
# Here goes your code that fetches the rates from external source.
|
|
19
|
+
# Emulating this:
|
|
20
|
+
sleep 1
|
|
21
|
+
bank.set_rate(:usd, :eur, 0.8)
|
|
22
|
+
|
|
23
|
+
bank.save! # you have to explicitly save after setting the rates
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
(See also [money\_bank\_sources](https://github.com/semaperepelitsa/money_bank_sources).)
|
|
27
|
+
|
|
28
|
+
And somewhere in your application:
|
|
29
|
+
|
|
30
|
+
1.to_money(:usd).exchange_to(:eur).to_f # => 0.8
|
|
31
|
+
|
|
32
|
+
When the rates are updated it will automatically use them.
|
|
33
|
+
|
|
34
|
+
[money]: https://github.com/RubyMoney/money
|
|
@@ -32,14 +32,20 @@ class Money
|
|
|
32
32
|
import_rates(RATE_FORMAT, @rates_cache) if @rates_cache
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
def get_rate(*
|
|
35
|
+
def get_rate(*)
|
|
36
36
|
update_rates
|
|
37
37
|
super
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
def
|
|
40
|
+
def rates(*)
|
|
41
|
+
update_rates
|
|
42
|
+
super
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def save
|
|
41
46
|
storage.write(CACHE_KEY, export_rates(RATE_FORMAT))
|
|
42
47
|
end
|
|
48
|
+
alias_method :save!, :save
|
|
43
49
|
|
|
44
50
|
def destroy
|
|
45
51
|
storage.delete(CACHE_KEY)
|
|
@@ -26,13 +26,13 @@ class PersistentBankTest < MiniTest::Unit::TestCase
|
|
|
26
26
|
|
|
27
27
|
assert_nil PersistentBank.new.get_rate('USD', 'AZN')
|
|
28
28
|
|
|
29
|
-
pb.save
|
|
29
|
+
pb.save
|
|
30
30
|
assert_equal 123, PersistentBank.new.get_rate('USD', 'AZN')
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def test_destroy
|
|
34
34
|
PersistentBank.instance.add_rate('USD', 'AZN', 123)
|
|
35
|
-
PersistentBank.instance.save
|
|
35
|
+
PersistentBank.instance.save
|
|
36
36
|
|
|
37
37
|
refute_nil PersistentBank.instance.get_rate('USD', 'AZN')
|
|
38
38
|
refute_nil PersistentBank.new.get_rate('USD', 'AZN')
|
|
@@ -44,7 +44,13 @@ class PersistentBankTest < MiniTest::Unit::TestCase
|
|
|
44
44
|
|
|
45
45
|
def test_updating_rates
|
|
46
46
|
assert_nil PersistentBank.instance.get_rate('USD', 'AZN')
|
|
47
|
-
PersistentBank.new.tap{|b| b.add_rate('USD', 'AZN', 123)}.save
|
|
47
|
+
PersistentBank.new.tap{|b| b.add_rate('USD', 'AZN', 123)}.save
|
|
48
48
|
assert_equal 123, PersistentBank.instance.get_rate('USD', 'AZN')
|
|
49
49
|
end
|
|
50
|
+
|
|
51
|
+
def test_rates_also_trigger_update
|
|
52
|
+
assert_nil PersistentBank.instance.get_rate('USD', 'AZN')
|
|
53
|
+
PersistentBank.new.tap{|b| b.add_rate('USD', 'AZN', 123)}.save
|
|
54
|
+
assert_equal({ "USD_TO_AZN" => 123 }, PersistentBank.instance.rates)
|
|
55
|
+
end
|
|
50
56
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: money_persistent_bank
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0
|
|
4
|
+
version: 0.1.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-
|
|
12
|
+
date: 2012-08-06 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: money
|
|
16
|
-
requirement:
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ! '>='
|
|
@@ -21,10 +21,15 @@ dependencies:
|
|
|
21
21
|
version: '4.0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements:
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '4.0'
|
|
25
30
|
- !ruby/object:Gem::Dependency
|
|
26
31
|
name: activesupport
|
|
27
|
-
requirement:
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
28
33
|
none: false
|
|
29
34
|
requirements:
|
|
30
35
|
- - ~>
|
|
@@ -32,7 +37,12 @@ dependencies:
|
|
|
32
37
|
version: '3.0'
|
|
33
38
|
type: :development
|
|
34
39
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ~>
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '3.0'
|
|
36
46
|
description:
|
|
37
47
|
email:
|
|
38
48
|
- sema@sema.in
|
|
@@ -41,8 +51,10 @@ extensions: []
|
|
|
41
51
|
extra_rdoc_files: []
|
|
42
52
|
files:
|
|
43
53
|
- .gitignore
|
|
54
|
+
- Changelog.md
|
|
44
55
|
- Gemfile
|
|
45
56
|
- Rakefile
|
|
57
|
+
- Readme.md
|
|
46
58
|
- lib/money/bank/persistent_bank.rb
|
|
47
59
|
- lib/money_persistent_bank.rb
|
|
48
60
|
- lib/money_persistent_bank/railtie.rb
|
|
@@ -69,9 +81,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
69
81
|
version: '0'
|
|
70
82
|
requirements: []
|
|
71
83
|
rubyforge_project: money_persistent_bank
|
|
72
|
-
rubygems_version: 1.8.
|
|
84
|
+
rubygems_version: 1.8.23
|
|
73
85
|
signing_key:
|
|
74
86
|
specification_version: 3
|
|
75
87
|
summary: Adds persistent bank to Money gem
|
|
76
88
|
test_files:
|
|
77
89
|
- test/persistent_bank_test.rb
|
|
90
|
+
has_rdoc:
|