russian_central_bank 0.2.1 → 0.3.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.
- checksums.yaml +4 -4
- data/README.md +6 -0
- data/lib/russian_central_bank.rb +21 -1
- data/russian_central_bank.gemspec +1 -1
- data/spec/russian_central_bank_spec.rb +40 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22f458d677cf82c7a11d3c4a88cffbfda4904bf0
|
4
|
+
data.tar.gz: fab07fb36ba2531fab496ec9bb37f070a3c76f41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cfbaccf01fc6f1da5c6edb7ef320aff5f8b4eb3dde5ef02d3db8488117d632b44f9a462142754561e50e75d4495ccde6d367a80d8817f29755e61cf96ff3e55
|
7
|
+
data.tar.gz: ef2ac1c0a4f56649e9c1f83327811b136923271ec730c408b7b19e41a21aca08b6890f50474f719c692fff32865a248f37dce644458a903a3e762b4496a257b4
|
data/README.md
CHANGED
@@ -27,6 +27,7 @@ Or install it yourself as:
|
|
27
27
|
|
28
28
|
# Load today's rates
|
29
29
|
bank.update_rates
|
30
|
+
|
30
31
|
# Or you can specify the date
|
31
32
|
bank.update_rates(3.days.ago)
|
32
33
|
|
@@ -41,6 +42,11 @@ Or install it yourself as:
|
|
41
42
|
# Check on which date rates were updated
|
42
43
|
bank.rates_updated_on
|
43
44
|
|
45
|
+
# Use ttl attribute to enable rates autoupdate
|
46
|
+
bank.ttl = 1.day
|
47
|
+
# Check expiration date
|
48
|
+
bank.rates_expired_at
|
49
|
+
|
44
50
|
## Contributing
|
45
51
|
|
46
52
|
1. Fork it
|
data/lib/russian_central_bank.rb
CHANGED
@@ -7,7 +7,7 @@ class Money
|
|
7
7
|
|
8
8
|
CBR_SERVICE_URL = 'http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL'
|
9
9
|
|
10
|
-
attr_reader :rates_updated_at, :rates_updated_on
|
10
|
+
attr_reader :rates_updated_at, :rates_updated_on, :ttl, :rates_expired_at
|
11
11
|
|
12
12
|
def flush_rates
|
13
13
|
@mutex.synchronize{
|
@@ -20,6 +20,7 @@ class Money
|
|
20
20
|
update_parsed_rates exchange_rates(date)
|
21
21
|
@rates_updated_at = Time.now
|
22
22
|
@rates_updated_on = date
|
23
|
+
update_expired_at
|
23
24
|
@rates
|
24
25
|
}
|
25
26
|
end
|
@@ -30,11 +31,30 @@ class Money
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def get_rate from, to
|
34
|
+
update_rates if rates_expired?
|
33
35
|
@rates[rate_key_for(from, to)] || indirect_rate(from, to)
|
34
36
|
end
|
35
37
|
|
38
|
+
def ttl=(value)
|
39
|
+
@ttl = value
|
40
|
+
update_expired_at
|
41
|
+
@ttl
|
42
|
+
end
|
43
|
+
|
44
|
+
def rates_expired?
|
45
|
+
rates_expired_at && rates_expired_at <= Time.now
|
46
|
+
end
|
47
|
+
|
36
48
|
private
|
37
49
|
|
50
|
+
def update_expired_at
|
51
|
+
@rates_expired_at = if ttl
|
52
|
+
@rates_updated_at ? @rates_updated_at + ttl : Time.now
|
53
|
+
else
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
38
58
|
def indirect_rate from, to
|
39
59
|
from_base_rate = @rates[rate_key_for('RUB', from)]
|
40
60
|
to_base_rate = @rates[rate_key_for('RUB', to)]
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = 'russian_central_bank'
|
7
|
-
spec.version = '0.
|
7
|
+
spec.version = '0.3.0'
|
8
8
|
spec.authors = ['Ramil Mustafin']
|
9
9
|
spec.email = ['rommel.rmm@gmail.com']
|
10
10
|
spec.description = 'RussianCentralBank extends Money::Bank::VariableExchange and gives you access to the Central Bank of Russia currency exchange rates.'
|
@@ -64,5 +64,45 @@ describe 'RussianCentralBank' do
|
|
64
64
|
expect(@bank.get_rate('RUB', 'USD')).to eq(1.0 / indirect_rate)
|
65
65
|
end
|
66
66
|
end
|
67
|
+
|
68
|
+
context "when ttl is not set" do
|
69
|
+
before do
|
70
|
+
@bank.add_rate('RUB', 'USD', 123)
|
71
|
+
@bank.ttl = nil
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should not update rates" do
|
75
|
+
@bank.should_not_receive(:update_rates)
|
76
|
+
@bank.get_rate('RUB', 'USD')
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when ttl is set" do
|
81
|
+
before { @bank.add_rate('RUB', 'USD', 123) }
|
82
|
+
|
83
|
+
context "and raks are expired" do
|
84
|
+
before do
|
85
|
+
@bank.instance_variable_set('@rates_updated_at', Time.now - 3600)
|
86
|
+
@bank.ttl = 3600
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should update rates" do
|
90
|
+
@bank.should_receive(:update_rates)
|
91
|
+
@bank.get_rate('RUB', 'USD')
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "and ranks are not expired" do
|
96
|
+
before do
|
97
|
+
@bank.instance_variable_set('@rates_updated_at', Time.now - 3000)
|
98
|
+
@bank.ttl = 3600
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should not update rates" do
|
102
|
+
@bank.should_not_receive(:update_rates)
|
103
|
+
@bank.get_rate('RUB', 'USD')
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
67
107
|
end
|
68
108
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: russian_central_bank
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ramil Mustafin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|