russian_central_bank 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 22f458d677cf82c7a11d3c4a88cffbfda4904bf0
4
- data.tar.gz: fab07fb36ba2531fab496ec9bb37f070a3c76f41
3
+ metadata.gz: 876e31a704b78e07f98a29a05e17e83ef17de6aa
4
+ data.tar.gz: 05819489bd309ee2f0ce1e3c4b66bd2fadd505ef
5
5
  SHA512:
6
- metadata.gz: 4cfbaccf01fc6f1da5c6edb7ef320aff5f8b4eb3dde5ef02d3db8488117d632b44f9a462142754561e50e75d4495ccde6d367a80d8817f29755e61cf96ff3e55
7
- data.tar.gz: ef2ac1c0a4f56649e9c1f83327811b136923271ec730c408b7b19e41a21aca08b6890f50474f719c692fff32865a248f37dce644458a903a3e762b4496a257b4
6
+ metadata.gz: da4e31eb6d86580b64a6272fbf299e82aa38ad7f885f0db2d145830b7b94b82df1c53c0f2b517fb639b0a248dda02a9bb00bf7de1cc8315c1ec2755dc6654f36
7
+ data.tar.gz: 87547efb549d977dfec661fa8a23c2b5b1de1355ce8032417a6fbcf060634a7df2f8f33c4f336bd161986461dcc2d189216d97fbcb227014557ed3fd168bc315
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
+ [![Build Status](https://circleci.com/gh/rmustafin/russian_central_bank.svg?style=shield)](https://circleci.com/gh/rmustafin/russian_central_bank)
2
+ [![License](https://img.shields.io/github/license/rmustafin/russian_central_bank.svg)](http://opensource.org/licenses/MIT)
3
+
1
4
  # RussianCentralBank
2
5
 
3
- This gem extends Money::Bank::VariableExchange with Money::Bank::RussianCentralBank and gives acceess to the Central Bank of Russia currency exchange.
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
- # Or you can specify the date
32
- bank.update_rates(3.days.ago)
42
+ # Exchange 100 USD to RUB
43
+ Money.new(1000, "USD").exchange_to('RUB')
33
44
 
34
- Money.default_bank = bank
45
+ Specific date rates
35
46
 
36
- # Exchange 100 USD to RUB
37
- 100.to_money('USD').exchange_to('RUB')
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
 
@@ -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
- @mutex.synchronize{
14
- @rates = {}
15
- }
13
+ @store = Money::RatesStore::Memory.new
16
14
  end
17
15
 
18
16
  def update_rates(date = Date.today)
19
- @mutex.synchronize{
20
- update_parsed_rates exchange_rates(date)
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
- @rates
25
- }
22
+ store.send(:index)
23
+ end
26
24
  end
27
25
 
28
- def set_rate(from, to, rate)
29
- @rates[rate_key_for(from, to)] = rate
30
- @rates[rate_key_for(to, from)] = 1.0 / rate
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 from, to
31
+ def get_rate(from, to)
34
32
  update_rates if rates_expired?
35
- @rates[rate_key_for(from, to)] || indirect_rate(from, to)
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 from, to
59
- from_base_rate = @rates[rate_key_for('RUB', from)]
60
- to_base_rate = @rates[rate_key_for('RUB', to)]
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 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.3.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', '>=2.0.0'
22
+ spec.add_development_dependency 'rspec', '~>3'
23
23
 
24
- spec.add_dependency 'money', '>=5.0'
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.any_instance.stub_chain(:call, :body).and_return rates_hash
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'].should == 0.03083678705348332
20
- @bank.rates['RUB_TO_EUR'].should == 0.023478587528174305
21
- @bank.rates['RUB_TO_JPY'].should == 3.086143524190736
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.rates.should == {}
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').should == 0.03
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').should == 0.6666666666666667
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.should_not_receive(:update_rates)
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.should_receive(:update_rates)
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.should_not_receive(:update_rates)
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
@@ -4,7 +4,7 @@ require 'support/helpers'
4
4
 
5
5
 
6
6
  RSpec.configure do |config|
7
- config.color_enabled = true
7
+ config.color = true
8
8
  config.tty = true
9
9
 
10
10
  config.order = :random
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.3.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: 2014-05-21 00:00:00.000000000 Z
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: 2.0.0
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: 2.0.0
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: '5.0'
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: '5.0'
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.0.3
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.