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 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.