money_persistent_bank 0.1.0 → 0.2.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
data/Readme.md CHANGED
@@ -8,7 +8,7 @@ This can be useful in a Rails application. You fetch rates from external source
8
8
 
9
9
  Add it to your gemfile:
10
10
 
11
- gem "persistent_bank", "~> 0.1.0"
11
+ gem "money_persistent_bank", "~> 0.1.0"
12
12
 
13
13
  Now you can use it in a rake task.
14
14
 
@@ -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
- class << self
8
- attr_accessor :default_storage
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
- attr_accessor :storage
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 update_rates
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
- import_rates(RATE_FORMAT, @rates_cache) if @rates_cache
33
- end
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 rates(*)
41
- update_rates
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
- initializer "money_persistent_bank.default_storage" do
5
+ initializer "money_persistent_bank" do |app|
6
+ require "money"
5
7
  require "money/bank/persistent_bank"
6
- Money::Bank::PersistentBank.default_storage = Rails.cache
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
- initializer "money_persistent_bank.make_default" do
10
- require "money"
11
- require "money/bank/persistent_bank"
12
- Money.default_bank = Money::Bank::PersistentBank.instance
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,3 +1,3 @@
1
1
  module MoneyPersistentBank
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0.alpha"
3
3
  end
@@ -1,2 +1 @@
1
- require "money/bank/persistent_bank"
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
- STORAGE.clear
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
- pb = PersistentBank.new
25
- pb.add_rate('USD', 'AZN', 123)
26
-
27
- assert_nil PersistentBank.new.get_rate('USD', 'AZN')
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 test_destroy
34
- PersistentBank.instance.add_rate('USD', 'AZN', 123)
35
- PersistentBank.instance.save
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
- assert_nil PersistentBank.instance.get_rate('USD', 'AZN')
42
- assert_nil PersistentBank.new.get_rate('USD', 'AZN')
43
- end
30
+ @reader.import_rates
31
+ refute_nil @reader.get_rate('USD', 'AZN')
44
32
 
45
- def test_updating_rates
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
- 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)
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.1.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-08-06 00:00:00.000000000 Z
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: '0'
81
+ version: 1.3.1
82
82
  requirements: []
83
83
  rubyforge_project: money_persistent_bank
84
84
  rubygems_version: 1.8.23