money_persistent_bank 0.0.1

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in money_persistent_bank.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require "rake/testtask"
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = Dir['test/*_test.rb']
7
+ t.verbose = true
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,47 @@
1
+ require "money/bank/variable_exchange"
2
+ require 'active_support/core_ext/class/attribute_accessors'
3
+
4
+ class Money
5
+ module Bank
6
+ class PersistentBank < VariableExchange
7
+
8
+ cattr_accessor :default_storage
9
+ attr_accessor :storage
10
+
11
+ RATE_FORMAT = :yaml
12
+ CACHE_KEY = 'persistent_bank/rates'
13
+
14
+ def self.instance
15
+ @@pb_singleton ||= new
16
+ end
17
+
18
+ def setup
19
+ super
20
+ @storage = self.class.default_storage
21
+ self
22
+ end
23
+
24
+ def update_rates
25
+ previous_cache = @rates_cache
26
+ @rates_cache = storage.read(CACHE_KEY)
27
+ return if previous_cache == @rates_cache
28
+ rates.clear
29
+ import_rates(RATE_FORMAT, @rates_cache) if @rates_cache
30
+ end
31
+
32
+ def get_rate(*args)
33
+ update_rates
34
+ super
35
+ end
36
+
37
+ def save!
38
+ storage.write(CACHE_KEY, export_rates(RATE_FORMAT))
39
+ end
40
+
41
+ def destroy
42
+ storage.delete(CACHE_KEY)
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,13 @@
1
+ module MoneyPersistentBank
2
+ class Railtie < Rails::Railtie
3
+
4
+ initializer "money_persistent_bank.default_storage" do
5
+ Money::Bank::PersistentBank.default_storage = Rails.cache
6
+ end
7
+
8
+ initializer "money_persistent_bank.make_default" do
9
+ Money.default_bank = Money::Bank::PersistentBank.instance
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module MoneyPersistentBank
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,2 @@
1
+ require "money/bank/persistent_bank"
2
+ require "money_persistent_bank/railtie" if defined? Rails
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "money_persistent_bank/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "money_persistent_bank"
7
+ s.version = MoneyPersistentBank::VERSION
8
+ s.authors = ["Semyon Perepelitsa"]
9
+ s.email = ["sema@sema.in"]
10
+ s.homepage = "https://github.com/semaperepelitsa/money_persistent_bank"
11
+ s.summary = %q{Adds persistent bank to Money gem}
12
+ # s.description = %q{TODO: Write a gem description}
13
+
14
+ s.rubyforge_project = "money_persistent_bank"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency "money"
22
+ s.add_dependency "activesupport"
23
+
24
+ # specify any dependencies here; for example:
25
+ # s.add_development_dependency "rspec"
26
+ # s.add_runtime_dependency "rest-client"
27
+ end
@@ -0,0 +1,50 @@
1
+ require "bundler/setup"
2
+ require 'minitest/autorun'
3
+ require 'money'
4
+ require "yaml"
5
+ $:.unshift(File.expand_path('../../lib', __FILE__))
6
+ require "money_persistent_bank"
7
+ require "active_support/cache"
8
+
9
+ STORAGE = ActiveSupport::Cache::MemoryStore.new
10
+ Money::Bank::PersistentBank.default_storage = STORAGE
11
+
12
+ class PersistentBankTest < MiniTest::Unit::TestCase
13
+ include Money::Bank
14
+
15
+ def test_instance
16
+ assert_equal PersistentBank, PersistentBank.instance.class
17
+ end
18
+
19
+ def setup
20
+ STORAGE.clear
21
+ end
22
+
23
+ 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')
31
+ end
32
+
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
40
+
41
+ assert_nil PersistentBank.instance.get_rate('USD', 'AZN')
42
+ assert_nil PersistentBank.new.get_rate('USD', 'AZN')
43
+ end
44
+
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
50
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: money_persistent_bank
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Semyon Perepelitsa
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: money
16
+ requirement: &70346886472300 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70346886472300
25
+ - !ruby/object:Gem::Dependency
26
+ name: activesupport
27
+ requirement: &70346886471440 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70346886471440
36
+ description:
37
+ email:
38
+ - sema@sema.in
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - .gitignore
44
+ - Gemfile
45
+ - Rakefile
46
+ - lib/money/bank/persistent_bank.rb
47
+ - lib/money_persistent_bank.rb
48
+ - lib/money_persistent_bank/railtie.rb
49
+ - lib/money_persistent_bank/version.rb
50
+ - money_persistent_bank.gemspec
51
+ - test/persistent_bank_test.rb
52
+ homepage: https://github.com/semaperepelitsa/money_persistent_bank
53
+ licenses: []
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ! '>='
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project: money_persistent_bank
72
+ rubygems_version: 1.8.11
73
+ signing_key:
74
+ specification_version: 3
75
+ summary: Adds persistent bank to Money gem
76
+ test_files:
77
+ - test/persistent_bank_test.rb
78
+ has_rdoc: