russian_central_bank 0.3.0 → 1.0.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 +23 -8
- data/lib/russian_central_bank.rb +15 -17
- data/russian_central_bank.gemspec +3 -3
- data/spec/russian_central_bank_spec.rb +10 -10
- data/spec/spec_helper.rb +1 -1
- metadata +20 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 876e31a704b78e07f98a29a05e17e83ef17de6aa
|
4
|
+
data.tar.gz: 05819489bd309ee2f0ce1e3c4b66bd2fadd505ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da4e31eb6d86580b64a6272fbf299e82aa38ad7f885f0db2d145830b7b94b82df1c53c0f2b517fb639b0a248dda02a9bb00bf7de1cc8315c1ec2755dc6654f36
|
7
|
+
data.tar.gz: 87547efb549d977dfec661fa8a23c2b5b1de1355ce8032417a6fbcf060634a7df2f8f33c4f336bd161986461dcc2d189216d97fbcb227014557ed3fd168bc315
|
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
[](https://circleci.com/gh/rmustafin/russian_central_bank)
|
2
|
+
[](http://opensource.org/licenses/MIT)
|
3
|
+
|
1
4
|
# RussianCentralBank
|
2
5
|
|
3
|
-
This gem extends Money::Bank::VariableExchange with Money::Bank::RussianCentralBank and gives
|
6
|
+
This gem extends [Money](https://github.com/RubyMoney/money)::Bank::VariableExchange with [Money](https://github.com/RubyMoney/money)::Bank::RussianCentralBank and gives access to the Central Bank of Russia currency exchange.
|
4
7
|
|
5
8
|
## Installation
|
6
9
|
|
@@ -16,25 +19,34 @@ Or install it yourself as:
|
|
16
19
|
|
17
20
|
$ gem install russian_central_bank
|
18
21
|
|
22
|
+
NOTE: use 0.x version of `russian_central_bank` for > 6.0 `money` versions
|
23
|
+
|
19
24
|
##Dependencies
|
20
25
|
|
21
|
-
* savon
|
22
|
-
* money
|
26
|
+
* [savon](http://savonrb.com/)
|
27
|
+
* [money](https://github.com/RubyMoney/money)
|
23
28
|
|
24
29
|
## Usage
|
25
30
|
|
31
|
+
Regular usage
|
32
|
+
|
33
|
+
require 'russian_central_bank'
|
34
|
+
|
26
35
|
bank = Money::Bank::RussianCentralBank.new
|
27
36
|
|
37
|
+
Money.default_bank = bank
|
38
|
+
|
28
39
|
# Load today's rates
|
29
40
|
bank.update_rates
|
30
41
|
|
31
|
-
#
|
32
|
-
|
42
|
+
# Exchange 100 USD to RUB
|
43
|
+
Money.new(1000, "USD").exchange_to('RUB')
|
33
44
|
|
34
|
-
|
45
|
+
Specific date rates
|
35
46
|
|
36
|
-
#
|
37
|
-
|
47
|
+
# Specify rates date
|
48
|
+
bank.update_rates(Date.today - 3000)
|
49
|
+
Money.new(1000, "USD").exchange_to('RUB') # makes you feel better
|
38
50
|
|
39
51
|
# Check last rates update
|
40
52
|
bank.rates_updated_at
|
@@ -42,8 +54,11 @@ Or install it yourself as:
|
|
42
54
|
# Check on which date rates were updated
|
43
55
|
bank.rates_updated_on
|
44
56
|
|
57
|
+
Autoupdate
|
58
|
+
|
45
59
|
# Use ttl attribute to enable rates autoupdate
|
46
60
|
bank.ttl = 1.day
|
61
|
+
|
47
62
|
# Check expiration date
|
48
63
|
bank.rates_expired_at
|
49
64
|
|
data/lib/russian_central_bank.rb
CHANGED
@@ -10,29 +10,27 @@ class Money
|
|
10
10
|
attr_reader :rates_updated_at, :rates_updated_on, :ttl, :rates_expired_at
|
11
11
|
|
12
12
|
def flush_rates
|
13
|
-
@
|
14
|
-
@rates = {}
|
15
|
-
}
|
13
|
+
@store = Money::RatesStore::Memory.new
|
16
14
|
end
|
17
15
|
|
18
16
|
def update_rates(date = Date.today)
|
19
|
-
|
20
|
-
update_parsed_rates
|
17
|
+
store.transaction do
|
18
|
+
update_parsed_rates(exchange_rates(date))
|
21
19
|
@rates_updated_at = Time.now
|
22
20
|
@rates_updated_on = date
|
23
21
|
update_expired_at
|
24
|
-
|
25
|
-
|
22
|
+
store.send(:index)
|
23
|
+
end
|
26
24
|
end
|
27
25
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
26
|
+
def add_rate(from, to, rate)
|
27
|
+
super(from, to, rate)
|
28
|
+
super(to, from, 1.0 / rate)
|
31
29
|
end
|
32
30
|
|
33
|
-
def get_rate
|
31
|
+
def get_rate(from, to)
|
34
32
|
update_rates if rates_expired?
|
35
|
-
|
33
|
+
super || indirect_rate(from, to)
|
36
34
|
end
|
37
35
|
|
38
36
|
def ttl=(value)
|
@@ -55,19 +53,19 @@ class Money
|
|
55
53
|
end
|
56
54
|
end
|
57
55
|
|
58
|
-
def indirect_rate
|
59
|
-
from_base_rate =
|
60
|
-
to_base_rate =
|
56
|
+
def indirect_rate(from, to)
|
57
|
+
from_base_rate = get_rate('RUB', from)
|
58
|
+
to_base_rate = get_rate('RUB', to)
|
61
59
|
to_base_rate / from_base_rate
|
62
60
|
end
|
63
61
|
|
64
|
-
def exchange_rates(date)
|
62
|
+
def exchange_rates(date = Date.today)
|
65
63
|
client = Savon::Client.new(wsdl: CBR_SERVICE_URL, log: false, log_level: :error)
|
66
64
|
response = client.call(:get_curs_on_date, message: { 'On_date' => date.strftime('%Y-%m-%dT%H:%M:%S') })
|
67
65
|
response.body[:get_curs_on_date_response][:get_curs_on_date_result][:diffgram][:valute_data][:valute_curs_on_date]
|
68
66
|
end
|
69
67
|
|
70
|
-
def update_parsed_rates
|
68
|
+
def update_parsed_rates(rates)
|
71
69
|
local_currencies = Money::Currency.table.map { |currency| currency.last[:iso_code] }
|
72
70
|
add_rate('RUB', 'RUB', 1)
|
73
71
|
rates.each do |rate|
|
@@ -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 = '1.0.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.'
|
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_development_dependency 'bundler', '~>1.3'
|
21
21
|
spec.add_development_dependency 'rake'
|
22
|
-
spec.add_development_dependency 'rspec', '
|
22
|
+
spec.add_development_dependency 'rspec', '~>3'
|
23
23
|
|
24
|
-
spec.add_dependency 'money', '
|
24
|
+
spec.add_dependency 'money', '~>6.0'
|
25
25
|
spec.add_dependency 'savon', '~>2.0'
|
26
26
|
end
|
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
describe 'RussianCentralBank' do
|
4
4
|
before do
|
5
5
|
rates_hash = symbolize_keys YAML::load(File.open('spec/support/daily_rates.yml'))
|
6
|
-
Savon::Client.
|
6
|
+
allow_any_instance_of(Savon::Client).to receive_message_chain(:call, :body) { rates_hash }
|
7
7
|
end
|
8
8
|
|
9
9
|
before :each do
|
@@ -16,9 +16,9 @@ describe 'RussianCentralBank' do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should update rates from daily rates service' do
|
19
|
-
@bank.rates['RUB_TO_USD'].
|
20
|
-
@bank.rates['RUB_TO_EUR'].
|
21
|
-
@bank.rates['RUB_TO_JPY'].
|
19
|
+
expect(@bank.rates['RUB_TO_USD']).to eq(0.03083678705348332)
|
20
|
+
expect(@bank.rates['RUB_TO_EUR']).to eq(0.023478587528174305)
|
21
|
+
expect(@bank.rates['RUB_TO_JPY']).to eq(3.086143524190736)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -30,7 +30,7 @@ describe 'RussianCentralBank' do
|
|
30
30
|
it 'should delete all rates' do
|
31
31
|
@bank.get_rate('RUB', 'USD')
|
32
32
|
@bank.flush_rates
|
33
|
-
@bank.
|
33
|
+
expect(@bank.store.send(:index)).to be_empty
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -43,11 +43,11 @@ describe 'RussianCentralBank' do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'should get rate from @rates' do
|
46
|
-
@bank.get_rate('RUB', 'USD').
|
46
|
+
expect(@bank.get_rate('RUB', 'USD')).to eq(0.03)
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'should calculate indirect rates' do
|
50
|
-
@bank.get_rate('USD', 'GBP').
|
50
|
+
expect(@bank.get_rate('USD', 'GBP')).to eq(0.6666666666666667)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -72,7 +72,7 @@ describe 'RussianCentralBank' do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should not update rates" do
|
75
|
-
@bank.
|
75
|
+
expect(@bank).to_not receive(:update_rates)
|
76
76
|
@bank.get_rate('RUB', 'USD')
|
77
77
|
end
|
78
78
|
end
|
@@ -87,7 +87,7 @@ describe 'RussianCentralBank' do
|
|
87
87
|
end
|
88
88
|
|
89
89
|
it "should update rates" do
|
90
|
-
@bank.
|
90
|
+
expect(@bank).to receive(:update_rates)
|
91
91
|
@bank.get_rate('RUB', 'USD')
|
92
92
|
end
|
93
93
|
end
|
@@ -99,7 +99,7 @@ describe 'RussianCentralBank' do
|
|
99
99
|
end
|
100
100
|
|
101
101
|
it "should not update rates" do
|
102
|
-
@bank.
|
102
|
+
expect(@bank).to_not receive(:update_rates)
|
103
103
|
@bank.get_rate('RUB', 'USD')
|
104
104
|
end
|
105
105
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: russian_central_bank
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.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: 2015-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '3'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '3'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: money
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '6.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '6.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: savon
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '2.0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '2.0'
|
83
83
|
description: RussianCentralBank extends Money::Bank::VariableExchange and gives you
|
@@ -88,7 +88,7 @@ executables: []
|
|
88
88
|
extensions: []
|
89
89
|
extra_rdoc_files: []
|
90
90
|
files:
|
91
|
-
- .gitignore
|
91
|
+
- ".gitignore"
|
92
92
|
- Gemfile
|
93
93
|
- LICENSE.txt
|
94
94
|
- README.md
|
@@ -109,17 +109,17 @@ require_paths:
|
|
109
109
|
- lib
|
110
110
|
required_ruby_version: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
|
-
- -
|
112
|
+
- - ">="
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0'
|
115
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- -
|
117
|
+
- - ">="
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
122
|
+
rubygems_version: 2.4.5.1
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: Access to Central Bank of Russia currency exchange rates.
|