money_persistent_bank 0.1.0 → 0.2.0.alpha
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/Readme.md +1 -1
- data/lib/money/bank/persistent_bank.rb +13 -39
- data/lib/money_persistent_bank/railtie.rb +19 -7
- data/lib/money_persistent_bank/version.rb +1 -1
- data/lib/money_persistent_bank.rb +1 -2
- data/test/persistent_bank_test.rb +16 -34
- metadata +5 -5
data/Readme.md
CHANGED
@@ -3,54 +3,28 @@ require "money/bank/variable_exchange"
|
|
3
3
|
class Money
|
4
4
|
module Bank
|
5
5
|
class PersistentBank < VariableExchange
|
6
|
+
attr_reader :storage
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
def initialize storage, key = 'persistent_bank/rates', format = :yaml
|
9
|
+
super()
|
10
|
+
@storage = storage
|
11
|
+
@storage_key = key
|
12
|
+
@storage_format = format
|
9
13
|
end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
RATE_FORMAT = :yaml
|
14
|
-
CACHE_KEY = 'persistent_bank/rates'
|
15
|
-
|
16
|
-
# Inherited .instance returns VariableExchange for some reason
|
17
|
-
def self.instance
|
18
|
-
@@pb_singleton ||= new
|
19
|
-
end
|
20
|
-
|
21
|
-
def setup
|
22
|
-
super
|
23
|
-
@storage = self.class.default_storage
|
24
|
-
self
|
15
|
+
def export_rates
|
16
|
+
storage.write(@storage_key, super(@storage_format))
|
25
17
|
end
|
26
18
|
|
27
|
-
def
|
28
|
-
previous_cache = @rates_cache
|
29
|
-
@rates_cache = storage.read(CACHE_KEY)
|
30
|
-
return if previous_cache == @rates_cache # Do not reload rates if cache wasn't changed
|
19
|
+
def import_rates
|
31
20
|
rates.clear
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
def get_rate(*)
|
36
|
-
update_rates
|
37
|
-
super
|
21
|
+
cache = storage.read(@storage_key)
|
22
|
+
super(@storage_format, cache) if cache
|
38
23
|
end
|
39
24
|
|
40
|
-
def
|
41
|
-
|
42
|
-
super
|
25
|
+
def clear
|
26
|
+
storage.delete(@storage_key)
|
43
27
|
end
|
44
|
-
|
45
|
-
def save
|
46
|
-
storage.write(CACHE_KEY, export_rates(RATE_FORMAT))
|
47
|
-
end
|
48
|
-
alias_method :save!, :save
|
49
|
-
|
50
|
-
def destroy
|
51
|
-
storage.delete(CACHE_KEY)
|
52
|
-
end
|
53
|
-
|
54
28
|
end
|
55
29
|
end
|
56
30
|
end
|
@@ -1,16 +1,28 @@
|
|
1
|
+
require "rails/railtie"
|
2
|
+
|
1
3
|
module MoneyPersistentBank
|
2
4
|
class Railtie < Rails::Railtie
|
3
|
-
|
4
|
-
|
5
|
+
initializer "money_persistent_bank" do |app|
|
6
|
+
require "money"
|
5
7
|
require "money/bank/persistent_bank"
|
6
|
-
|
8
|
+
tmp = app.paths['tmp'].first
|
9
|
+
cache = ActiveSupport::Cache::FileStore.new("#{tmp}/money_persistent_bank")
|
10
|
+
bank = Money::Bank::PersistentBank.new(cache)
|
11
|
+
Money.default_bank = bank
|
12
|
+
app.config.middleware.use Synchronization, bank
|
7
13
|
end
|
14
|
+
end
|
8
15
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
16
|
+
# Updates rates from the cache on each request
|
17
|
+
class Synchronization
|
18
|
+
def initialize app, bank = Money.default_bank
|
19
|
+
@app = app
|
20
|
+
@bank = bank
|
13
21
|
end
|
14
22
|
|
23
|
+
def call env
|
24
|
+
@bank.import_rates
|
25
|
+
@app.call env
|
26
|
+
end
|
15
27
|
end
|
16
28
|
end
|
@@ -1,2 +1 @@
|
|
1
|
-
require "
|
2
|
-
require "money_persistent_bank/railtie" if defined? Rails
|
1
|
+
require "money_persistent_bank/railtie"
|
@@ -6,51 +6,33 @@ $:.unshift(File.expand_path('../../lib', __FILE__))
|
|
6
6
|
require "money_persistent_bank"
|
7
7
|
require "active_support/cache"
|
8
8
|
|
9
|
-
STORAGE = ActiveSupport::Cache::MemoryStore.new
|
10
|
-
Money::Bank::PersistentBank.default_storage = STORAGE
|
11
|
-
|
12
9
|
class PersistentBankTest < MiniTest::Unit::TestCase
|
13
10
|
include Money::Bank
|
14
11
|
|
15
|
-
def test_instance
|
16
|
-
assert_equal PersistentBank, PersistentBank.instance.class
|
17
|
-
end
|
18
|
-
|
19
12
|
def setup
|
20
|
-
|
13
|
+
@storage = ActiveSupport::Cache::MemoryStore.new
|
14
|
+
@writer = PersistentBank.new(@storage)
|
15
|
+
@reader = PersistentBank.new(@storage)
|
21
16
|
end
|
22
17
|
|
23
18
|
def test_persistance
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
pb.save
|
30
|
-
assert_equal 123, PersistentBank.new.get_rate('USD', 'AZN')
|
19
|
+
@writer.add_rate('USD', 'AZN', 123)
|
20
|
+
@writer.export_rates
|
21
|
+
assert_nil @reader.get_rate('USD', 'AZN')
|
22
|
+
@reader.import_rates
|
23
|
+
assert_equal 123, @reader.get_rate('USD', 'AZN')
|
31
24
|
end
|
32
25
|
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
refute_nil PersistentBank.instance.get_rate('USD', 'AZN')
|
38
|
-
refute_nil PersistentBank.new.get_rate('USD', 'AZN')
|
39
|
-
PersistentBank.instance.destroy
|
26
|
+
def test_clear
|
27
|
+
@writer.add_rate('USD', 'AZN', 123)
|
28
|
+
@writer.export_rates
|
40
29
|
|
41
|
-
|
42
|
-
|
43
|
-
end
|
30
|
+
@reader.import_rates
|
31
|
+
refute_nil @reader.get_rate('USD', 'AZN')
|
44
32
|
|
45
|
-
|
46
|
-
assert_nil PersistentBank.instance.get_rate('USD', 'AZN')
|
47
|
-
PersistentBank.new.tap{|b| b.add_rate('USD', 'AZN', 123)}.save
|
48
|
-
assert_equal 123, PersistentBank.instance.get_rate('USD', 'AZN')
|
49
|
-
end
|
33
|
+
@writer.clear
|
50
34
|
|
51
|
-
|
52
|
-
assert_nil
|
53
|
-
PersistentBank.new.tap{|b| b.add_rate('USD', 'AZN', 123)}.save
|
54
|
-
assert_equal({ "USD_TO_AZN" => 123 }, PersistentBank.instance.rates)
|
35
|
+
@reader.import_rates
|
36
|
+
assert_nil @reader.get_rate('USD', 'AZN')
|
55
37
|
end
|
56
38
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money_persistent_bank
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0.alpha
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Semyon Perepelitsa
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: money
|
@@ -76,9 +76,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
76
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
77
|
none: false
|
78
78
|
requirements:
|
79
|
-
- - ! '
|
79
|
+
- - ! '>'
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
81
|
+
version: 1.3.1
|
82
82
|
requirements: []
|
83
83
|
rubyforge_project: money_persistent_bank
|
84
84
|
rubygems_version: 1.8.23
|