money_persistent_bank 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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(*args)
35
+ def get_rate(*)
36
36
  update_rates
37
37
  super
38
38
  end
39
39
 
40
- def save!
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)
@@ -1,3 +1,3 @@
1
1
  module MoneyPersistentBank
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -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.2
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-04-20 00:00:00.000000000 Z
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: &70365822127820 !ruby/object:Gem::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: *70365822127820
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: &70365822127320 !ruby/object:Gem::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: *70365822127320
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.11
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: