exchanges-rates-nbp 0.0.3 → 1.0.3
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/CHANGELOG.md +6 -0
- data/Gemfile.lock +2 -1
- data/README.md +37 -2
- data/Rakefile +10 -0
- data/exchanges-rates-nbp.gemspec +3 -2
- data/lib/exchanges/nbp.rb +10 -0
- data/lib/exchanges/rates.rb +17 -23
- data/lib/exchanges/version.rb +1 -1
- data/lib/exchanges-rates-nbp.rb +1 -0
- data/spec/exchanges_nbp_spec.rb +46 -0
- data/spec/exchanges_rates_spec.rb +141 -0
- data/spec/spec_helper.rb +1 -1
- metadata +25 -7
- data/lib/nbp.rb +0 -2
- data/spec/exchanges-rates-nbp_spec.rb +0 -95
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c5f535ac6ac56bd9b53da04e2e76c80abb7ea55
|
4
|
+
data.tar.gz: 07e58f2b034a76a7fbc21230b860b45cd5b0f0d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2c54a074354d610b3caf1c329a91cd49c3e02245fdc7c177e7ff31ec97e59e326d30b9a4f240059e57a04595410d027e1b91f041dd91d762f7829ff420cae7cf
|
7
|
+
data.tar.gz: f77539f87e757c55b03aadffd0d63092cda74f1ae0d67bfb7d2844fadde811894da1d487b775571ba9956c3649f45a8d4e10f4d3b020dd9f9126f4e965863c06
|
data/CHANGELOG.md
ADDED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Exchanges::Rates::Nbp
|
2
2
|
|
3
|
-
|
3
|
+
Simple gem that gets exchange rates from the Polish National Bank.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -18,7 +18,42 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
Default usage:
|
22
|
+
|
23
|
+
nbp = Exchange::Nbp.new(nil, nil)
|
24
|
+
|
25
|
+
,parameters:
|
26
|
+
|
27
|
+
* date - default Date.today, you can pass another valid date
|
28
|
+
|
29
|
+
* args - optional parameters
|
30
|
+
|
31
|
+
|
32
|
+
Class instance has three important methods:
|
33
|
+
|
34
|
+
* codes - returns currency symbols from table,
|
35
|
+
|
36
|
+
* published_at - returns publication date exchange rates,
|
37
|
+
|
38
|
+
* rates(currency) - returns currency rate at indicated date
|
39
|
+
|
40
|
+
|
41
|
+
If you interested only selected currencies at indicated day use in this way:
|
42
|
+
|
43
|
+
nbp = Exchange::Nbp.new(Date.today - 3, {selected_currencies: ['USD', 'EUR']})
|
44
|
+
|
45
|
+
|
46
|
+
Now you can retrieve currency rates for chosen:
|
47
|
+
|
48
|
+
nbp.codes.each do |c|
|
49
|
+
nbp.rates(c)
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
## Future ideas
|
54
|
+
1. Currency and CurrencyRate model, Sequel/ActiveRecord migration
|
55
|
+
2. Background job to retrieve currency rates automatically
|
56
|
+
|
22
57
|
|
23
58
|
## Contributing
|
24
59
|
|
data/Rakefile
CHANGED
data/exchanges-rates-nbp.gemspec
CHANGED
@@ -11,11 +11,12 @@ Gem::Specification.new do |spec|
|
|
11
11
|
spec.email = ["krzysztof.wieslawski@gmail.com"]
|
12
12
|
spec.summary = %q{Gem to retrieve exchange rates from the Polish National Bank (NBP)}
|
13
13
|
spec.description = %q{}
|
14
|
-
spec.homepage = ""
|
14
|
+
spec.homepage = "https://github.com/xborn/exchanges-rates-nbp"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0")
|
18
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ["lib"]
|
21
|
-
|
21
|
+
spec.add_runtime_dependency "nokogiri", ["~> 1.6"]
|
22
|
+
end
|
data/lib/exchanges/rates.rb
CHANGED
@@ -6,23 +6,17 @@ require 'nokogiri'
|
|
6
6
|
|
7
7
|
module Exchanges
|
8
8
|
module Rates
|
9
|
-
NBP = 'http://www.nbp.pl/kursy/xml/'
|
10
|
-
|
11
|
-
@@date = Date.today
|
12
9
|
|
13
|
-
|
14
|
-
@@date
|
15
|
-
end
|
10
|
+
attr_accessor :date, :selected_currencies
|
16
11
|
|
17
|
-
|
18
|
-
@@date = at_date
|
19
|
-
end
|
12
|
+
NBP = 'http://www.nbp.pl/kursy/xml/'
|
20
13
|
|
21
|
-
def
|
22
|
-
|
14
|
+
def codes
|
15
|
+
res = xml.xpath("//pozycja/kod_waluty/text()").map {|c| c.to_s }
|
16
|
+
@selected_currencies.empty? ? res : res.select {|c| @selected_currencies.include?(c)}
|
23
17
|
end
|
24
18
|
|
25
|
-
def
|
19
|
+
def rates(currency)
|
26
20
|
rate = {}
|
27
21
|
rate[:symbol] = xml.xpath("//pozycja[kod_waluty='#{currency}']/kod_waluty/text()").to_s
|
28
22
|
rate[:name] = xml.xpath("//pozycja[kod_waluty='#{currency}']/nazwa_waluty/text()").to_s
|
@@ -31,28 +25,27 @@ module Exchanges
|
|
31
25
|
rate
|
32
26
|
end
|
33
27
|
|
34
|
-
def
|
28
|
+
def published_at
|
35
29
|
Date.parse(xml.xpath("//tabela_kursow/data_publikacji/text()").to_s)
|
36
30
|
end
|
37
31
|
|
38
|
-
|
39
|
-
def self.filename
|
32
|
+
def filename
|
40
33
|
# according to: http://www.nbp.pl/home.aspx?f=/kursy/instrukcja_pobierania_kursow_walut.html
|
41
34
|
index = Net::HTTP.get(URI.parse(NBP + 'dir.txt'))
|
42
35
|
|
43
|
-
while index[/(a[0-9][0-9][0-9]z#{
|
44
|
-
|
36
|
+
while index[/(a[0-9][0-9][0-9]z#{@date.strftime("%y%m%d")}+)/, 1].nil? do
|
37
|
+
@date -= 1
|
45
38
|
end
|
46
|
-
index[/(a[0-9][0-9][0-9]z#{
|
47
|
-
end
|
39
|
+
index[/(a[0-9][0-9][0-9]z#{@date.strftime("%y%m%d")}+)/, 1]
|
40
|
+
end
|
48
41
|
|
49
|
-
def
|
50
|
-
File.join(NBP,
|
42
|
+
def url
|
43
|
+
File.join(NBP, filename + '.xml') if filename
|
51
44
|
end
|
52
45
|
|
53
|
-
def
|
46
|
+
def xml
|
54
47
|
begin
|
55
|
-
doc = open(
|
48
|
+
doc = open(url)
|
56
49
|
rescue Exception => e
|
57
50
|
puts e.message
|
58
51
|
puts e.backtrace.inspect
|
@@ -60,5 +53,6 @@ module Exchanges
|
|
60
53
|
|
61
54
|
Nokogiri::HTML(doc) if doc
|
62
55
|
end
|
56
|
+
|
63
57
|
end
|
64
58
|
end
|
data/lib/exchanges/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require 'exchanges/nbp'
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Exchanges::Nbp do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
@dummy = Exchanges::Nbp.new(nil, nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
context 'when date is not passed' do
|
10
|
+
it 'returns @date equal Date.today' do
|
11
|
+
expect(@dummy.date).to eq Date.today
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when date is passed e.g. \'2014-08-31\'' do
|
16
|
+
before(:all) do
|
17
|
+
@dummy = Exchanges::Nbp.new(Date.new(2014,8,31), nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'returns @date equal Date.today' do
|
21
|
+
expect(@dummy.date).to eq Date.new(2014,8,31)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'when two valid currencies are chosen' do
|
26
|
+
before(:all) do
|
27
|
+
@dummy = Exchanges::Nbp.new(nil, {selected_currencies: ['USD','EUR']})
|
28
|
+
end
|
29
|
+
|
30
|
+
it '#codes returns 2-elements Array' do
|
31
|
+
expect(@dummy.codes).to be_kind_of(Array)
|
32
|
+
expect(@dummy.codes.length).to eq 2
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when any currencies are selected at \'2014-08-31\'' do
|
37
|
+
before(:all) do
|
38
|
+
@dummy = Exchanges::Nbp.new(nil, nil)
|
39
|
+
end
|
40
|
+
|
41
|
+
it '#codes returns 36-elements Array' do
|
42
|
+
expect(@dummy.codes.length).to eq 36
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class DummyClass
|
4
|
+
include Exchanges::Rates
|
5
|
+
|
6
|
+
def initialize(date, args)
|
7
|
+
@date = date ||= Date.today
|
8
|
+
@selected_currencies = args.nil? ? [] : args[:selected_currencies]
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
RSpec.describe Exchanges::Rates do
|
13
|
+
include Exchanges::Rates
|
14
|
+
|
15
|
+
context 'when date is default' do
|
16
|
+
before(:each) do
|
17
|
+
@dummy = DummyClass.new(Date.today, nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'constant NBP' do
|
21
|
+
it 'responds to constant NBP' do
|
22
|
+
expect(Exchanges::Rates::NBP).to be
|
23
|
+
end
|
24
|
+
it 'NBP is url' do
|
25
|
+
expect(Exchanges::Rates::NBP.match(/^http:\/\//)).to be_truthy
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '@date' do
|
30
|
+
it 'module responds to @@date' do
|
31
|
+
expect(@dummy.date).to be
|
32
|
+
end
|
33
|
+
it 'default @date is today' do
|
34
|
+
expect(@dummy.date).to eq Date.today
|
35
|
+
end
|
36
|
+
it 'is possible to change @date' do
|
37
|
+
@dummy.date = Date.today - 3
|
38
|
+
expect(@dummy.date).to eq Date.today - 3
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns url to xml file' do
|
43
|
+
expect(@dummy.url.match(/.xml$/)).to be_truthy
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#xml' do
|
47
|
+
it 'returns xml for chosen date' do
|
48
|
+
xml = @dummy.xml
|
49
|
+
expect(xml.xpath("//data_publikacji/text()").to_s).to eq @dummy.date.strftime("%Y-%m-%d")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#codes' do
|
54
|
+
it 'returns array' do
|
55
|
+
expect(@dummy.codes).to be_kind_of(Array)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#rates' do
|
60
|
+
it 'returns Hash contained necessary informations' do
|
61
|
+
expect(@dummy.rates('USD')).to be_kind_of(Hash)
|
62
|
+
end
|
63
|
+
it 'Hash contains keys :symbol, :name, :base, :average_rate' do
|
64
|
+
expect(@dummy.rates('USD').keys.sort).to eq [:average_rate, :base, :name, :symbol]
|
65
|
+
end
|
66
|
+
it 'rate is a Float' do
|
67
|
+
expect(@dummy.rates('USD')[:average_rate]).to be_kind_of(Float)
|
68
|
+
end
|
69
|
+
it 'symbol, name, base and rate are not empty' do
|
70
|
+
[:symbol, :name, :base, :average_rate].each do |k|
|
71
|
+
expect(@dummy.rates('USD')[k].to_s).not_to be_empty
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '#published_at' do
|
77
|
+
it 'returns Date' do
|
78
|
+
expect(@dummy.published_at).to be_kind_of(Date)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when date is weekend day \'2014-08-31\', Sunday' do
|
85
|
+
before(:each) do
|
86
|
+
@dummy = DummyClass.new(Date.new(2014, 8, 31), nil)
|
87
|
+
end
|
88
|
+
|
89
|
+
describe '#filename' do
|
90
|
+
it 'returns \'a167z140829\' for Sunday, 2014-08-31\'' do
|
91
|
+
expect(@dummy.filename).to eq 'a167z140829'
|
92
|
+
end
|
93
|
+
it 'returns \'a167z140829\' for Friday, 2014-08-29\'' do
|
94
|
+
expect(@dummy.filename).to eq 'a167z140829'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
describe '#rates' do
|
99
|
+
it 'at \'2014-08-31\' USD rate is 3.1965 (from table at \'2014-08-29\')' do
|
100
|
+
expect(@dummy.rates('USD')[:average_rate]).to eq 3.1965
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'when only \'USD\' is selected' do
|
106
|
+
before(:each) do
|
107
|
+
@dummy = DummyClass.new(Date.new(2014, 8, 31), {selected_currencies: ['USD']})
|
108
|
+
end
|
109
|
+
|
110
|
+
describe '#codes' do
|
111
|
+
it 'returns only one code' do
|
112
|
+
expect(@dummy.codes.length).to eq 1
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'when only \'USD\', \'EUR\' and \'GBP\' are selected' do
|
118
|
+
before(:each) do
|
119
|
+
@dummy = DummyClass.new(Date.new(2014, 8, 31), {selected_currencies: ['USD', 'EUR', 'GBP']})
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '#codes' do
|
123
|
+
it 'returns three codes' do
|
124
|
+
expect(@dummy.codes.length).to eq 3
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'when wrong code is selected' do
|
130
|
+
before(:each) do
|
131
|
+
@dummy = DummyClass.new(Date.new(2014, 8, 31), {selected_currencies: ['XXX']})
|
132
|
+
end
|
133
|
+
|
134
|
+
describe '#codes' do
|
135
|
+
it 'returns three codes' do
|
136
|
+
expect(@dummy.codes.length).to eq 0
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exchanges-rates-nbp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- krzysztof.wieslawski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
12
|
-
dependencies:
|
11
|
+
date: 2014-10-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
13
27
|
description: ''
|
14
28
|
email:
|
15
29
|
- krzysztof.wieslawski@gmail.com
|
@@ -18,6 +32,7 @@ extensions: []
|
|
18
32
|
extra_rdoc_files: []
|
19
33
|
files:
|
20
34
|
- ".gitignore"
|
35
|
+
- CHANGELOG.md
|
21
36
|
- Gemfile
|
22
37
|
- Gemfile.lock
|
23
38
|
- Guardfile
|
@@ -25,13 +40,15 @@ files:
|
|
25
40
|
- README.md
|
26
41
|
- Rakefile
|
27
42
|
- exchanges-rates-nbp.gemspec
|
43
|
+
- lib/exchanges-rates-nbp.rb
|
44
|
+
- lib/exchanges/nbp.rb
|
28
45
|
- lib/exchanges/rates.rb
|
29
46
|
- lib/exchanges/version.rb
|
30
|
-
-
|
31
|
-
- spec/
|
47
|
+
- spec/exchanges_nbp_spec.rb
|
48
|
+
- spec/exchanges_rates_spec.rb
|
32
49
|
- spec/spec_helper.rb
|
33
50
|
- spec/support/a167z140829.xml
|
34
|
-
homepage:
|
51
|
+
homepage: https://github.com/xborn/exchanges-rates-nbp
|
35
52
|
licenses:
|
36
53
|
- MIT
|
37
54
|
metadata: {}
|
@@ -56,6 +73,7 @@ signing_key:
|
|
56
73
|
specification_version: 4
|
57
74
|
summary: Gem to retrieve exchange rates from the Polish National Bank (NBP)
|
58
75
|
test_files:
|
59
|
-
- spec/
|
76
|
+
- spec/exchanges_nbp_spec.rb
|
77
|
+
- spec/exchanges_rates_spec.rb
|
60
78
|
- spec/spec_helper.rb
|
61
79
|
- spec/support/a167z140829.xml
|
data/lib/nbp.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe Exchanges::Rates do
|
4
|
-
|
5
|
-
context 'when date is default' do
|
6
|
-
before(:each) do
|
7
|
-
Exchanges::Rates.date = Date.today
|
8
|
-
end
|
9
|
-
|
10
|
-
describe 'constant NBP' do
|
11
|
-
it 'responds to constant NBP' do
|
12
|
-
expect(Exchanges::Rates::NBP).to be
|
13
|
-
end
|
14
|
-
it 'NBP is url' do
|
15
|
-
expect(Exchanges::Rates::NBP.match(/^http:\/\//)).to be_truthy
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe '@@date' do
|
20
|
-
it 'module responds to @@date' do
|
21
|
-
expect(Exchanges::Rates.date).to be
|
22
|
-
end
|
23
|
-
it 'default @@date is today' do
|
24
|
-
expect(Exchanges::Rates.date).to eq Date.today
|
25
|
-
end
|
26
|
-
it 'is possible to change @@date' do
|
27
|
-
Exchanges::Rates.date = Date.today - 3
|
28
|
-
expect(Exchanges::Rates.date).to eq Date.today - 3
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns url to xml file' do
|
33
|
-
expect(Exchanges::Rates.url.match(/.xml$/)).to be_truthy
|
34
|
-
end
|
35
|
-
|
36
|
-
describe '.xml' do
|
37
|
-
it 'returns xml for chosen date' do
|
38
|
-
xml = Exchanges::Rates.xml
|
39
|
-
expect(xml.xpath("//data_publikacji/text()").to_s).to eq Exchanges::Rates.date.strftime("%Y-%m-%d")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '.codes' do
|
44
|
-
it 'returns array' do
|
45
|
-
expect(Exchanges::Rates.codes).to be_kind_of(Array)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe '.rates' do
|
50
|
-
it 'returns Hash contained necessary informations' do
|
51
|
-
expect(Exchanges::Rates.rates('USD')).to be_kind_of(Hash)
|
52
|
-
end
|
53
|
-
it 'Hash contains keys :symbol, :name, :base, :average_rate' do
|
54
|
-
expect(Exchanges::Rates.rates('USD').keys.sort).to eq [:average_rate, :base, :name, :symbol]
|
55
|
-
end
|
56
|
-
it 'rate is a Float' do
|
57
|
-
expect(Exchanges::Rates.rates('USD')[:average_rate]).to be_kind_of(Float)
|
58
|
-
end
|
59
|
-
it 'symbol, name, base and rate are not empty' do
|
60
|
-
[:symbol, :name, :base, :average_rate].each do |k|
|
61
|
-
expect(Exchanges::Rates.rates('USD')[k].to_s).not_to be_empty
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe '.published_at' do
|
67
|
-
it 'returns Date' do
|
68
|
-
expect(Exchanges::Rates.published_at).to be_kind_of(Date)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'when date is weekend day \'2014-08-31\', Sunday' do
|
75
|
-
before(:each) do
|
76
|
-
Exchanges::Rates.date = Date.new(2014,8,31)
|
77
|
-
end
|
78
|
-
|
79
|
-
describe '.filename' do
|
80
|
-
it 'returns filename \'a167z140829\' for Sunday, 2014-08-31\'' do
|
81
|
-
expect(Exchanges::Rates.filename).to eq 'a167z140829'
|
82
|
-
end
|
83
|
-
it 'returns filename \'a167z140829\' for Friday, 2014-08-29\'' do
|
84
|
-
expect(Exchanges::Rates.filename).to eq 'a167z140829'
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe '.rates' do
|
89
|
-
it 'at \'2014-08-31\' USD rate is 3.1965 (from table at \'2014-08-29\')' do
|
90
|
-
expect(Exchanges::Rates.rates('USD')[:average_rate]).to eq 3.1965
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|