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 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: