cnb 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +3 -2
- data/README.md +28 -71
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/cnb.gemspec +14 -10
- data/lib/cnb.rb +18 -9
- data/lib/cnb/base.rb +41 -0
- data/lib/cnb/config.rb +8 -0
- data/lib/cnb/daily_rates.rb +12 -5
- data/lib/cnb/monthly_rates.rb +8 -18
- data/lib/cnb/version.rb +1 -1
- data/spec/cnb/daily_rates_spec.rb +63 -0
- data/spec/cnb/monthly_rates_spec.rb +64 -0
- data/spec/fixtures/monthly_rates.xml +128 -0
- metadata +69 -22
- data/lib/cnb/currency_rates.rb +0 -48
- data/spec/cnb_spec.rb +0 -23
- data/spec/fixtures/monthly_rates_2013_03.xml +0 -130
- data/spec/models/daily_rates_spec.rb +0 -36
- data/spec/models/monthly_rates_spec.rb +0 -48
- data/spec/spec_helper.rb +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 858f3fe634e67b77e82d87c3745e5b131bc50354
|
4
|
+
data.tar.gz: 86c130801822ec5bf9d2a64764483c7ad8bb7bd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9dee283458065e6e87dbe69603c26780750df48db0b5ff3250bde2b853bc5050710a19f12e3d4c8447539484a29acbb90fbeb11bd9d1272b08f3b05e6e1084db
|
7
|
+
data.tar.gz: 478fbdb5558b95dfd7493517b2551a574c3a1b67b1e5ee68197e7f17ac60c694ab9548e6c6d5ab58df7756fef1de9167e809ef4aaadadd95fd7dacdd21206acb
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
cnb
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.2
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -2,99 +2,56 @@
|
|
2
2
|
|
3
3
|
[![Gem Version](https://badge.fury.io/rb/cnb.png)](http://badge.fury.io/rb/cnb)
|
4
4
|
[![Build Status](https://travis-ci.org/ucetnictvi-on-line/cnb.png?branch=master)](https://travis-ci.org/ucetnictvi-on-line/cnb)
|
5
|
+
[![Dependency Status](https://gemnasium.com/ucetnictvi-on-line/cnb.svg)](https://gemnasium.com/ucetnictvi-on-line/cnb)
|
5
6
|
[![Code Climate](https://codeclimate.com/github/ucetnictvi-on-line/cnb/badges/gpa.svg)](https://codeclimate.com/github/ucetnictvi-on-line/cnb)
|
6
7
|
[![Test Coverage](https://codeclimate.com/github/ucetnictvi-on-line/cnb/badges/coverage.svg)](https://codeclimate.com/github/ucetnictvi-on-line/cnb)
|
7
8
|
|
8
|
-
CNB is a gem that will help you get daily and monthly currency rates for czech crown (CZK) from Czech National Bank.
|
9
|
-
|
9
|
+
CNB is a gem that will help you get daily and monthly currency rates for czech crown (CZK) from Czech National Bank.
|
10
10
|
|
11
11
|
## Install
|
12
12
|
|
13
|
-
Add following into your Gemfile
|
14
13
|
|
15
|
-
gem 'cnb'
|
16
14
|
|
17
|
-
|
15
|
+
Add following into your Gemfile
|
18
16
|
|
19
|
-
|
17
|
+
```ruby
|
18
|
+
gem 'cnb'
|
19
|
+
```
|
20
20
|
|
21
21
|
Or install the gem by on your own
|
22
22
|
|
23
|
-
|
24
|
-
|
23
|
+
```ruby
|
24
|
+
gem install cnb
|
25
|
+
```
|
25
26
|
|
26
27
|
## Usage
|
27
28
|
|
29
|
+
### Daily
|
28
30
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
CNB.daily_rates
|
33
|
-
|
34
|
-
This will provide you object from which you can get the currency rates and other information. Everytime you use the code above, actual currency rates are retrived from Czech National Bank, so it is a good idea to assign the result to variable if you don't want to make more HTTP requests than neccessary.
|
35
|
-
|
36
|
-
Get currency rate of currency with given currency code towards czech crown (CZK)
|
37
|
-
|
38
|
-
CNB.daily_rates.rate('USD') # 19.927 (float value)
|
39
|
-
CNB.daily_rates.rate('EUR') # 27.34
|
40
|
-
|
41
|
-
By using the code above you make 2 requests for currency rates.
|
42
|
-
|
43
|
-
The following code does the same thing but it retrives the currency rates just once.
|
44
|
-
|
45
|
-
daily_rates = CNB.daily_rates
|
46
|
-
daily_rates.rate('USD')
|
47
|
-
daily_rates.rate('EUR')
|
48
|
-
|
49
|
-
Get name of the currency in czech language.
|
50
|
-
|
51
|
-
CNB.daily_rates.name('USD') # dolar
|
52
|
-
|
53
|
-
Get name of the country where the currency comes from in czech language.
|
54
|
-
|
55
|
-
CNB.daily_rates.country('USD') # USA
|
56
|
-
|
57
|
-
**The currency code parameter is not case sensitive.**
|
58
|
-
|
59
|
-
Get date when the currency rates were published. Czech National Bank does not publish currency rates during the weekend, so you may want to check when exactly were the values published.
|
60
|
-
|
61
|
-
CNB.date
|
62
|
-
|
63
|
-
You can get all currencies as hash where currency codes are used as keys by the following code
|
64
|
-
|
65
|
-
CNB.daily_rates.currencies
|
66
|
-
|
67
|
-
|
68
|
-
### Monthly currency rates
|
69
|
-
|
70
|
-
Some currency rates are published on monthly basis. You can get currency rates for any month and year since 2004.
|
71
|
-
|
72
|
-
To get the monthly currency rates use the following code:
|
73
|
-
|
74
|
-
# Get currency rates for March 2013
|
75
|
-
CNB.monthly_rates(3, 2013)
|
76
|
-
|
77
|
-
You can only retrieve monthly currency rates that were published since 2004. If you try to get older currency rates, exception will be raised.
|
78
|
-
|
79
|
-
After using the code above, you can use the same methods as for the daily currency rates.
|
80
|
-
|
81
|
-
monthly_rates = CNB.monthly_rates(3, 2013)
|
82
|
-
monthly_rates.rate('HNL')
|
83
|
-
monthly_rates.name('HNL') # lempira
|
84
|
-
monthly_rates.country('HNL') # Honduras
|
85
|
-
monthly_rates.date
|
86
|
-
|
87
|
-
Get all currencies as hash
|
31
|
+
```ruby
|
32
|
+
CNB.daily_rate('AUD', Date.today)
|
33
|
+
```
|
88
34
|
|
89
|
-
|
35
|
+
Returns today's exchange rate between CZK and AUD.
|
36
|
+
Input date defaults to Date.today so the above line can written like this:
|
90
37
|
|
38
|
+
```ruby
|
39
|
+
CNB.daily_rate('AUD')
|
40
|
+
```
|
91
41
|
|
92
|
-
###
|
42
|
+
### Monthly
|
93
43
|
|
94
|
-
|
44
|
+
```ruby
|
45
|
+
CNB.monthly_rate('ALL', Date.today)
|
46
|
+
```
|
95
47
|
|
96
|
-
|
48
|
+
Returns today's exchange rate between CZK and ALL (Albanian lek).
|
97
49
|
|
50
|
+
#### Exceptions
|
51
|
+
* DateTooOld - triggers when date entered is older than 24 years, or 10 years if monthly.
|
52
|
+
* DateInFuture - triggers when date enetered is in future.
|
53
|
+
* CurrencyMissing - triggers when currency is not present.
|
54
|
+
* CurrencyNotSupported - triggers when currency is not in downloaded list of currencies.
|
98
55
|
|
99
56
|
## Contributing
|
100
57
|
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'cnb'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
require 'pry'
|
11
|
+
Pry.start
|
12
|
+
|
13
|
+
# require 'irb'
|
14
|
+
# IRB.start
|
data/cnb.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
4
|
|
4
5
|
require 'cnb/version'
|
5
6
|
|
@@ -7,22 +8,25 @@ Gem::Specification.new do |s|
|
|
7
8
|
s.name = 'cnb'
|
8
9
|
s.version = CNB::VERSION
|
9
10
|
s.platform = Gem::Platform::RUBY
|
10
|
-
s.authors = ['Jan Zikán']
|
11
|
-
s.email = ['zikan@uol.cz']
|
11
|
+
s.authors = ['Jan Zikán', 'Tomas Koutsky']
|
12
|
+
s.email = ['zikan@uol.cz', 'tomas@stepnivlk.net']
|
12
13
|
s.summary = 'CNB currency rates'
|
13
|
-
s.description = 'Get daily and monthly currency rates from Czech National Bank'
|
14
|
+
s.description = 'Get daily and monthly currency rates from Czech National Bank.'
|
14
15
|
s.homepage = 'http://www.uol.cz'
|
15
16
|
s.license = 'MIT'
|
16
17
|
|
17
|
-
s.files
|
18
|
-
s.test_files
|
18
|
+
s.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
s.test_files = `git ls-files -- spec/**/*`.split("\n")
|
19
20
|
|
20
|
-
s.require_paths =
|
21
|
+
s.require_paths = %w('lib', 'config')
|
21
22
|
|
22
23
|
s.add_dependency('nokogiri', '~> 1.6')
|
23
|
-
s.add_development_dependency('
|
24
|
-
s.add_development_dependency('rake', '~>
|
24
|
+
s.add_development_dependency('bundler')
|
25
|
+
s.add_development_dependency('rake', '~> 10.4')
|
25
26
|
s.add_development_dependency('rspec', '~> 2.14')
|
27
|
+
s.add_development_dependency('pry')
|
28
|
+
s.add_development_dependency('webmock')
|
29
|
+
s.add_development_dependency('timecop')
|
26
30
|
s.add_development_dependency('simplecov', '~> 0.8')
|
27
31
|
s.add_development_dependency('codeclimate-test-reporter')
|
28
32
|
end
|
data/lib/cnb.rb
CHANGED
@@ -1,17 +1,26 @@
|
|
1
|
-
require '
|
1
|
+
require 'date'
|
2
|
+
require 'cnb/version'
|
3
|
+
require 'cnb/config'
|
4
|
+
require 'cnb/base'
|
2
5
|
require 'cnb/daily_rates'
|
3
6
|
require 'cnb/monthly_rates'
|
4
7
|
|
8
|
+
# The main interface to CNB rates.
|
5
9
|
module CNB
|
6
|
-
|
10
|
+
class DateTooOld < StandardError; end
|
11
|
+
class DateInFuture < StandardError; end
|
12
|
+
class CurrencyMissing < StandardError; end
|
13
|
+
class CurrencyNotSupported < StandardError; end
|
7
14
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
15
|
+
# Returns float with daily rate for given currency and date.
|
16
|
+
def self.daily_rate(currency, date = Date.today)
|
17
|
+
daily_rates = DailyRates.new
|
18
|
+
daily_rates.rate_for(currency, date)
|
19
|
+
end
|
12
20
|
|
13
|
-
|
14
|
-
|
15
|
-
|
21
|
+
# Returns float with monthly rate for given currency and date.
|
22
|
+
def self.monthly_rate(currency, date = Date.today)
|
23
|
+
monthly_rates = MonthlyRates.new
|
24
|
+
monthly_rates.rate_for(currency, date)
|
16
25
|
end
|
17
26
|
end
|
data/lib/cnb/base.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
module CNB
|
6
|
+
class Base
|
7
|
+
def rate_for(currency, date)
|
8
|
+
fail CurrencyMissing unless currency
|
9
|
+
fail DateInFuture if date > Date.today
|
10
|
+
|
11
|
+
rates_for(date)
|
12
|
+
rate = @source.at_css("radek[kod='#{currency}']")
|
13
|
+
|
14
|
+
fail CurrencyNotSupported if rate.nil?
|
15
|
+
|
16
|
+
rate.attr('kurz').tr(',', '.').to_f
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def rates_for(date)
|
22
|
+
if @source.nil? || (@source && !match_parsed_date?(date))
|
23
|
+
@source = source_for(date)
|
24
|
+
end
|
25
|
+
|
26
|
+
@source
|
27
|
+
end
|
28
|
+
|
29
|
+
def source_for(date)
|
30
|
+
Nokogiri::XML(open(url_for(date)))
|
31
|
+
end
|
32
|
+
|
33
|
+
def match_parsed_date?(date)
|
34
|
+
@source ? Date.parse(@source.at_css('kurzy').attr('datum')) == date : nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def normalize_date(date)
|
38
|
+
date.is_a?(Date) ? date : Date.parse(date)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/cnb/config.rb
ADDED
data/lib/cnb/daily_rates.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
1
3
|
module CNB
|
2
|
-
class DailyRates <
|
3
|
-
def
|
4
|
-
|
5
|
-
|
4
|
+
class DailyRates < Base
|
5
|
+
def rate_for(currency, date = Date.today)
|
6
|
+
normalized_date = normalize_date(date)
|
7
|
+
fail DateTooOld if normalized_date.year < (Date.today.year - CNB::DAILY_MAX_PAST)
|
8
|
+
super(currency, normalized_date)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
6
12
|
|
7
|
-
|
13
|
+
def url_for(date)
|
14
|
+
CNB::BASE_URL + CNB::DAILY + date.strftime('%d.%m.%Y')
|
8
15
|
end
|
9
16
|
end
|
10
17
|
end
|
data/lib/cnb/monthly_rates.rb
CHANGED
@@ -1,26 +1,16 @@
|
|
1
1
|
module CNB
|
2
|
-
class MonthlyRates <
|
3
|
-
def
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
raise 'Invalid month given' unless valid_month?
|
8
|
-
raise 'Invalid year given' unless valid_year?
|
9
|
-
|
10
|
-
@currencies = {}
|
11
|
-
@cur_rates_url = "#{CUR_RATES_URL}/kurzy_ostatnich_men/kurzy.xml?mesic=#{month}&rok=#{year}"
|
12
|
-
|
13
|
-
get_currencies
|
2
|
+
class MonthlyRates < Base
|
3
|
+
def rate_for(currency, date = Date.today)
|
4
|
+
normalized_date = normalize_date(date)
|
5
|
+
fail DateTooOld if normalized_date.year < (Date.today.year - CNB::MONTHLY_MAX_PAST)
|
6
|
+
super(currency, normalized_date)
|
14
7
|
end
|
15
8
|
|
16
9
|
private
|
17
10
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
def valid_year?
|
23
|
-
@year.to_i >= 2004 && @year.to_i <= Time.now.year
|
11
|
+
def url_for(date)
|
12
|
+
CNB::BASE_URL + CNB::MONTHLY + date.strftime('%m') +
|
13
|
+
CNB::MONTHLY_SEP + date.strftime('%Y')
|
24
14
|
end
|
25
15
|
end
|
26
16
|
end
|
data/lib/cnb/version.rb
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'webmock/rspec'
|
3
|
+
require 'timecop'
|
4
|
+
|
5
|
+
RSpec.describe CNB::DailyRates do
|
6
|
+
let(:daily_rates) { CNB::DailyRates.new }
|
7
|
+
let(:currency) { 'AUD' }
|
8
|
+
let(:dates) do
|
9
|
+
{
|
10
|
+
invalid_past: Date.today - (365 * 25),
|
11
|
+
future: Date.today + 100
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#rate_for' do
|
16
|
+
before do
|
17
|
+
Timecop.freeze('25.02.2014')
|
18
|
+
url = CNB::BASE_URL + CNB::DAILY + Date.today.strftime('%d.%m.%Y')
|
19
|
+
stub_request(:get, url)
|
20
|
+
.to_return(status: 200, body: load_fixture)
|
21
|
+
end
|
22
|
+
|
23
|
+
after do
|
24
|
+
Timecop.return
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'valid parameters' do
|
28
|
+
it 'returns rate for given currency and date' do
|
29
|
+
expect(daily_rates.rate_for(currency, Date.today)).to eql(17.936)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'returns rate for given currency with default date' do
|
33
|
+
expect(daily_rates.rate_for(currency)).to eql(17.936)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'invalid parameters' do
|
38
|
+
it 'raises CurrencyNotSupported exception when invalid currency given' do
|
39
|
+
expect { daily_rates.rate_for('FOOBAR') }
|
40
|
+
.to raise_error CNB::CurrencyNotSupported
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'raises DateTooOld exception with too old date' do
|
44
|
+
expect { daily_rates.rate_for(currency, dates[:invalid_past]) }
|
45
|
+
.to raise_error CNB::DateTooOld
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'raises DateInFuture exception with future date' do
|
49
|
+
expect { daily_rates.rate_for(currency, dates[:future]) }
|
50
|
+
.to raise_error CNB::DateInFuture
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'raises CurrencyMissing exception when no currency given' do
|
54
|
+
expect { daily_rates.rate_for(nil) }
|
55
|
+
.to raise_error CNB::CurrencyMissing
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def load_fixture
|
61
|
+
File.open('spec/fixtures/daily_rates.xml')
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'webmock/rspec'
|
3
|
+
require 'timecop'
|
4
|
+
|
5
|
+
RSpec.describe CNB::MonthlyRates do
|
6
|
+
let(:monthly_rates) { CNB::MonthlyRates.new }
|
7
|
+
let(:currency) { 'ALL' }
|
8
|
+
let(:dates) do
|
9
|
+
{
|
10
|
+
invalid_past: Date.today - (365 * 11),
|
11
|
+
future: Date.today + 100
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#rate_for' do
|
16
|
+
before do
|
17
|
+
Timecop.freeze('25.02.2014')
|
18
|
+
url = CNB::BASE_URL + CNB::MONTHLY + Date.today.strftime('%m') +
|
19
|
+
CNB::MONTHLY_SEP + Date.today.strftime('%Y')
|
20
|
+
stub_request(:get, url)
|
21
|
+
.to_return(status: 200, body: load_fixture)
|
22
|
+
end
|
23
|
+
|
24
|
+
after do
|
25
|
+
Timecop.return
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'valid parameters' do
|
29
|
+
it 'returns rate for given currency and date' do
|
30
|
+
expect(monthly_rates.rate_for(currency, Date.today)).to eql(19.564)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'returns rate for given currency with default date' do
|
34
|
+
expect(monthly_rates.rate_for(currency)).to eql(19.564)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'invalid parameters' do
|
39
|
+
it 'raises CurrencyNotSupported exception when invalid currency given' do
|
40
|
+
expect { monthly_rates.rate_for('FOOBAR') }
|
41
|
+
.to raise_error CNB::CurrencyNotSupported
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'raises DateTooOld exception with too old date' do
|
45
|
+
expect { monthly_rates.rate_for(currency, dates[:invalid_past]) }
|
46
|
+
.to raise_error CNB::DateTooOld
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'raises DateInFuture exception with future date' do
|
50
|
+
expect { monthly_rates.rate_for(currency, dates[:future]) }
|
51
|
+
.to raise_error CNB::DateInFuture
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'raises CurrencyMissing exception when no currency given' do
|
55
|
+
expect { monthly_rates.rate_for(nil) }
|
56
|
+
.to raise_error CNB::CurrencyMissing
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def load_fixture
|
62
|
+
File.open('spec/fixtures/monthly_rates.xml')
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<kurzy banka="CNB" datum="28.02.2014" poradi="2">
|
3
|
+
<tabulka typ="XML_TYP_CNB_KURZY_DEVIZOVEHO_TRHU">
|
4
|
+
<radek kod="AFN" mena="afghani" mnozstvi="100" kurz="35,137" zeme="Afghánistán" />
|
5
|
+
<radek kod="ALL" mena="lek" mnozstvi="100" kurz="19,564" zeme="Albánie" />
|
6
|
+
<radek kod="DZD" mena="dinár" mnozstvi="100" kurz="25,541" zeme="Alžírsko" />
|
7
|
+
<radek kod="AOA" mena="kwanza" mnozstvi="100" kurz="20,328" zeme="Angola" />
|
8
|
+
<radek kod="ARS" mena="peso" mnozstvi="1" kurz="2,510" zeme="Argentina" />
|
9
|
+
<radek kod="AMD" mena="dram" mnozstvi="100" kurz="4,792" zeme="Arménie" />
|
10
|
+
<radek kod="AWG" mena="gulden" mnozstvi="1" kurz="11,119" zeme="Aruba" />
|
11
|
+
<radek kod="AZN" mena="manat" mnozstvi="1" kurz="25,295" zeme="Ázerbájdžán" />
|
12
|
+
<radek kod="BSD" mena="dolar" mnozstvi="1" kurz="19,791" zeme="Bahamy" />
|
13
|
+
<radek kod="BHD" mena="dinár" mnozstvi="1" kurz="52,496" zeme="Bahrajn" />
|
14
|
+
<radek kod="BDT" mena="taka" mnozstvi="100" kurz="25,580" zeme="Bangladéš" />
|
15
|
+
<radek kod="BBD" mena="dolar" mnozstvi="1" kurz="10,033" zeme="Barbados" />
|
16
|
+
<radek kod="BZD" mena="dolar" mnozstvi="1" kurz="10,046" zeme="Belize" />
|
17
|
+
<radek kod="BYR" mena="rubl" mnozstvi="100" kurz="0,203" zeme="Bělorusko" />
|
18
|
+
<radek kod="BMD" mena="dolar" mnozstvi="1" kurz="19,791" zeme="Bermudy" />
|
19
|
+
<radek kod="BTN" mena="ngultrum" mnozstvi="100" kurz="32,029" zeme="Bhútán" />
|
20
|
+
<radek kod="BOB" mena="boliviano" mnozstvi="1" kurz="2,885" zeme="Bolivie" />
|
21
|
+
<radek kod="BAM" mena="marka" mnozstvi="1" kurz="13,979" zeme="Bosna a Hercegovina" />
|
22
|
+
<radek kod="BWP" mena="pula" mnozstvi="1" kurz="2,238" zeme="Botswana" />
|
23
|
+
<radek kod="BND" mena="dolar" mnozstvi="1" kurz="15,634" zeme="Brunej" />
|
24
|
+
<radek kod="BIF" mena="frank" mnozstvi="100" kurz="1,280" zeme="Burundi" />
|
25
|
+
<radek kod="ANG" mena="gulden" mnozstvi="1" kurz="11,119" zeme="Curacao a St. Marteen" />
|
26
|
+
<radek kod="DOP" mena="peso" mnozstvi="100" kurz="46,133" zeme="Dominikánská republika" />
|
27
|
+
<radek kod="DJF" mena="frank" mnozstvi="100" kurz="11,329" zeme="Džibutsko" />
|
28
|
+
<radek kod="EGP" mena="libra" mnozstvi="1" kurz="2,843" zeme="Egypt" />
|
29
|
+
<radek kod="ERN" mena="nakfa" mnozstvi="1" kurz="1,333" zeme="Eritrea" />
|
30
|
+
<radek kod="ETB" mena="birr" mnozstvi="1" kurz="1,030" zeme="Etiopie" />
|
31
|
+
<radek kod="FKP" mena="libra" mnozstvi="1" kurz="33,088" zeme="Falklandy" />
|
32
|
+
<radek kod="FJD" mena="dolar" mnozstvi="1" kurz="10,485" zeme="Fidži" />
|
33
|
+
<radek kod="XPF" mena="frank CFP" mnozstvi="100" kurz="23,045" zeme="Francouzská Polynésie" />
|
34
|
+
<radek kod="GMD" mena="dalasi" mnozstvi="100" kurz="52,357" zeme="Gambie" />
|
35
|
+
<radek kod="GHS" mena="Ghana cedi" mnozstvi="1" kurz="7,769" zeme="Ghana" />
|
36
|
+
<radek kod="GIP" mena="libra" mnozstvi="1" kurz="33,088" zeme="Gibraltar" />
|
37
|
+
<radek kod="GEL" mena="lari" mnozstvi="1" kurz="11,417" zeme="Gruzie" />
|
38
|
+
<radek kod="GTQ" mena="quetzal" mnozstvi="1" kurz="2,553" zeme="Guatemala" />
|
39
|
+
<radek kod="GNF" mena="frank" mnozstvi="1000" kurz="2,919" zeme="Guinea" />
|
40
|
+
<radek kod="GYD" mena="dolar" mnozstvi="100" kurz="9,739" zeme="Guyana" />
|
41
|
+
<radek kod="HTG" mena="gourde" mnozstvi="100" kurz="45,146" zeme="Haiti" />
|
42
|
+
<radek kod="HNL" mena="lempira" mnozstvi="1" kurz="1,012" zeme="Honduras" />
|
43
|
+
<radek kod="CLP" mena="peso" mnozstvi="100" kurz="3,535" zeme="Chile" />
|
44
|
+
<radek kod="IQD" mena="dinar" mnozstvi="1000" kurz="17,003" zeme="Irák" />
|
45
|
+
<radek kod="IRR" mena="rial" mnozstvi="1000" kurz="0,795" zeme="Írán" />
|
46
|
+
<radek kod="ISK" mena="koruna" mnozstvi="100" kurz="17,616" zeme="Island" />
|
47
|
+
<radek kod="JMD" mena="dolar" mnozstvi="100" kurz="18,376" zeme="Jamajka" />
|
48
|
+
<radek kod="YER" mena="rial" mnozstvi="100" kurz="9,218" zeme="Jemen" />
|
49
|
+
<radek kod="JOD" mena="dinár" mnozstvi="1" kurz="27,977" zeme="Jordánsko" />
|
50
|
+
<radek kod="KYD" mena="dolar" mnozstvi="1" kurz="24,135" zeme="Kajmanské ostrovy" />
|
51
|
+
<radek kod="KHR" mena="riel" mnozstvi="1000" kurz="4,974" zeme="Kambodža" />
|
52
|
+
<radek kod="CVE" mena="escudo" mnozstvi="100" kurz="25,160" zeme="Kapverdy" />
|
53
|
+
<radek kod="QAR" mena="rial" mnozstvi="1" kurz="5,435" zeme="Katar" />
|
54
|
+
<radek kod="KZT" mena="tenge" mnozstvi="100" kurz="10,733" zeme="Kazachstán" />
|
55
|
+
<radek kod="KES" mena="šilink" mnozstvi="100" kurz="22,978" zeme="Keňa" />
|
56
|
+
<radek kod="KPW" mena="won" mnozstvi="1" kurz="15,224" zeme="KLDR" />
|
57
|
+
<radek kod="COP" mena="peso" mnozstvi="1000" kurz="9,679" zeme="Kolumbie" />
|
58
|
+
<radek kod="KMF" mena="frank" mnozstvi="100" kurz="5,521" zeme="Komory" />
|
59
|
+
<radek kod="CDF" mena="frank" mnozstvi="100" kurz="2,177" zeme="Konžská demokratická republika" />
|
60
|
+
<radek kod="CRC" mena="colon" mnozstvi="100" kurz="3,942" zeme="Kostarika" />
|
61
|
+
<radek kod="CUP" mena="peso" mnozstvi="1" kurz="19,791" zeme="Kuba" />
|
62
|
+
<radek kod="KWD" mena="dinár" mnozstvi="1" kurz="70,426" zeme="Kuvajt" />
|
63
|
+
<radek kod="KGS" mena="som" mnozstvi="100" kurz="36,786" zeme="Kyrgyzstán" />
|
64
|
+
<radek kod="LAK" mena="kip" mnozstvi="1000" kurz="2,468" zeme="Laos" />
|
65
|
+
<radek kod="LSL" mena="loti" mnozstvi="1" kurz="1,852" zeme="Lesotho" />
|
66
|
+
<radek kod="LBP" mena="libra" mnozstvi="1000" kurz="13,161" zeme="Libanon" />
|
67
|
+
<radek kod="LRD" mena="dolar" mnozstvi="100" kurz="24,433" zeme="Libérie" />
|
68
|
+
<radek kod="LYD" mena="dinár" mnozstvi="1" kurz="16,039" zeme="Libye" />
|
69
|
+
<radek kod="MOP" mena="pataca" mnozstvi="1" kurz="2,478" zeme="Macao" />
|
70
|
+
<radek kod="MGA" mena="ariary" mnozstvi="1000" kurz="8,512" zeme="Madagaskar" />
|
71
|
+
<radek kod="MKD" mena="denár" mnozstvi="100" kurz="44,364" zeme="Makedonie" />
|
72
|
+
<radek kod="MWK" mena="kwacha" mnozstvi="100" kurz="4,769" zeme="Malawi" />
|
73
|
+
<radek kod="MVR" mena="rufiya" mnozstvi="1" kurz="1,299" zeme="Maledivy" />
|
74
|
+
<radek kod="MAD" mena="dirham" mnozstvi="1" kurz="2,428" zeme="Maroko" />
|
75
|
+
<radek kod="MRO" mena="ouguiya" mnozstvi="100" kurz="6,872" zeme="Mauritánie" />
|
76
|
+
<radek kod="MUR" mena="rupie" mnozstvi="100" kurz="66,191" zeme="Mauritius" />
|
77
|
+
<radek kod="MDL" mena="leu" mnozstvi="1" kurz="1,457" zeme="Moldavsko" />
|
78
|
+
<radek kod="MNT" mena="tugrik" mnozstvi="100" kurz="1,151" zeme="Mongolsko" />
|
79
|
+
<radek kod="MZN" mena="nový metical" mnozstvi="1000" kurz="615,583" zeme="Mosambik" />
|
80
|
+
<radek kod="MMK" mena="kyat" mnozstvi="1" kurz="0,020" zeme="Myanmar" />
|
81
|
+
<radek kod="NAD" mena="dolar" mnozstvi="1" kurz="1,852" zeme="Namibie" />
|
82
|
+
<radek kod="NPR" mena="rupie" mnozstvi="100" kurz="20,031" zeme="Nepál" />
|
83
|
+
<radek kod="NGN" mena="naira" mnozstvi="100" kurz="12,016" zeme="Nigérie" />
|
84
|
+
<radek kod="NIO" mena="cordoba " mnozstvi="1" kurz="0,783" zeme="Nikaragua" />
|
85
|
+
<radek kod="OMR" mena="rial" mnozstvi="1" kurz="51,407" zeme="Omán" />
|
86
|
+
<radek kod="PKR" mena="rupie" mnozstvi="100" kurz="18,872" zeme="Pákistán" />
|
87
|
+
<radek kod="PAB" mena="balboa" mnozstvi="1" kurz="19,791" zeme="Panama" />
|
88
|
+
<radek kod="PGK" mena="kina" mnozstvi="1" kurz="7,125" zeme="Papua-Nová Quinea" />
|
89
|
+
<radek kod="PYG" mena="guarani" mnozstvi="1000" kurz="4,465" zeme="Paraguay" />
|
90
|
+
<radek kod="PEN" mena="nuevo sol" mnozstvi="1" kurz="7,071" zeme="Peru" />
|
91
|
+
<radek kod="RWF" mena="frank" mnozstvi="100" kurz="2,932" zeme="Rwanda" />
|
92
|
+
<radek kod="SVC" mena="colon" mnozstvi="1" kurz="2,264" zeme="Salvádor" />
|
93
|
+
<radek kod="WST" mena="tala" mnozstvi="1" kurz="8,312" zeme="Samoa" />
|
94
|
+
<radek kod="SAR" mena="riyal" mnozstvi="1" kurz="5,277" zeme="Saudská Arábie" />
|
95
|
+
<radek kod="SCR" mena="rupie" mnozstvi="1" kurz="1,650" zeme="Seychely" />
|
96
|
+
<radek kod="SLL" mena="leone" mnozstvi="1000" kurz="4,573" zeme="Sierra-Leone" />
|
97
|
+
<radek kod="SOS" mena="šilink" mnozstvi="1000" kurz="19,271" zeme="Somálsko" />
|
98
|
+
<radek kod="AED" mena="dirham" mnozstvi="1" kurz="5,388" zeme="Spojené arabské emiráty" />
|
99
|
+
<radek kod="RSD" mena="dinár" mnozstvi="100" kurz="23,614" zeme="Srbsko" />
|
100
|
+
<radek kod="LKR" mena="rupie" mnozstvi="100" kurz="15,142" zeme="Srí Lanka" />
|
101
|
+
<radek kod="XAF" mena="frank CFA" mnozstvi="100" kurz="4,166" zeme="Státy střední Afriky" />
|
102
|
+
<radek kod="XOF" mena="frank CFA" mnozstvi="100" kurz="4,142" zeme="Státy západní Afriky" />
|
103
|
+
<radek kod="SDG" mena="libra" mnozstvi="1" kurz="3,484" zeme="Súdán" />
|
104
|
+
<radek kod="SRD" mena="dolar" mnozstvi="1" kurz="6,090" zeme="Surinam" />
|
105
|
+
<radek kod="SHP" mena="libra" mnozstvi="1" kurz="33,088" zeme="Svatá Helena" />
|
106
|
+
<radek kod="STD" mena="dobra" mnozstvi="1000" kurz="1,150" zeme="Svatý Tomáš a Princův ostrov" />
|
107
|
+
<radek kod="SZL" mena="lilangeni" mnozstvi="1" kurz="1,852" zeme="Svazijsko" />
|
108
|
+
<radek kod="SYP" mena="libra" mnozstvi="100" kurz="13,825" zeme="Sýrie" />
|
109
|
+
<radek kod="SBD" mena="dolar" mnozstvi="1" kurz="2,656" zeme="Šalomounovy ostrovy" />
|
110
|
+
<radek kod="TJS" mena="somoni" mnozstvi="1" kurz="4,160" zeme="Tádžikistán" />
|
111
|
+
<radek kod="TWD" mena="dolar" mnozstvi="100" kurz="65,315" zeme="Taiwan" />
|
112
|
+
<radek kod="TZS" mena="šilink" mnozstvi="100" kurz="1,222" zeme="Tanzanie" />
|
113
|
+
<radek kod="TOP" mena="pa`anga" mnozstvi="1" kurz="10,612" zeme="Tonga" />
|
114
|
+
<radek kod="TTD" mena="dolar" mnozstvi="1" kurz="3,102" zeme="Trinidad a Tobago" />
|
115
|
+
<radek kod="TND" mena="dinár" mnozstvi="1" kurz="12,567" zeme="Tunisko" />
|
116
|
+
<radek kod="TMT" mena="nový manat" mnozstvi="1" kurz="6,956" zeme="Turkmenistán" />
|
117
|
+
<radek kod="UGX" mena="šilink" mnozstvi="100" kurz="0,783" zeme="Uganda" />
|
118
|
+
<radek kod="UAH" mena="hřivna" mnozstvi="1" kurz="2,040" zeme="Ukrajina" />
|
119
|
+
<radek kod="UYU" mena="peso" mnozstvi="100" kurz="88,274" zeme="Uruguay" />
|
120
|
+
<radek kod="UZS" mena="sum" mnozstvi="100" kurz="0,891" zeme="Uzbekistán" />
|
121
|
+
<radek kod="VUV" mena="vatu" mnozstvi="100" kurz="20,828" zeme="Vanuatu" />
|
122
|
+
<radek kod="VEF" mena="bolivar" mnozstvi="1" kurz="3,149" zeme="Venezuela" />
|
123
|
+
<radek kod="VND" mena="dong" mnozstvi="1000" kurz="0,939" zeme="Vietnam" />
|
124
|
+
<radek kod="XCD" mena="dolar" mnozstvi="1" kurz="7,497" zeme="Východokaribská oblast" />
|
125
|
+
<radek kod="ZMW" mena="kwacha" mnozstvi="1" kurz="3,403" zeme="Zambie" />
|
126
|
+
<radek kod="ZWL" mena="dolar" mnozstvi="1000" kurz="0,000" zeme="Zimbabwe" />
|
127
|
+
</tabulka>
|
128
|
+
</kurzy>
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cnb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Zikán
|
8
|
+
- Tomas Koutsky
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2015-11-29 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: nokogiri
|
@@ -25,33 +26,33 @@ dependencies:
|
|
25
26
|
- !ruby/object:Gem::Version
|
26
27
|
version: '1.6'
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
29
|
+
name: bundler
|
29
30
|
requirement: !ruby/object:Gem::Requirement
|
30
31
|
requirements:
|
31
|
-
- - "
|
32
|
+
- - ">="
|
32
33
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0
|
34
|
+
version: '0'
|
34
35
|
type: :development
|
35
36
|
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
|
-
- - "
|
39
|
+
- - ">="
|
39
40
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0
|
41
|
+
version: '0'
|
41
42
|
- !ruby/object:Gem::Dependency
|
42
43
|
name: rake
|
43
44
|
requirement: !ruby/object:Gem::Requirement
|
44
45
|
requirements:
|
45
46
|
- - "~>"
|
46
47
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
+
version: '10.4'
|
48
49
|
type: :development
|
49
50
|
prerelease: false
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
53
|
- - "~>"
|
53
54
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
+
version: '10.4'
|
55
56
|
- !ruby/object:Gem::Dependency
|
56
57
|
name: rspec
|
57
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +67,48 @@ dependencies:
|
|
66
67
|
- - "~>"
|
67
68
|
- !ruby/object:Gem::Version
|
68
69
|
version: '2.14'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: pry
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: webmock
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ">="
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: timecop
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
69
112
|
- !ruby/object:Gem::Dependency
|
70
113
|
name: simplecov
|
71
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,31 +137,35 @@ dependencies:
|
|
94
137
|
- - ">="
|
95
138
|
- !ruby/object:Gem::Version
|
96
139
|
version: '0'
|
97
|
-
description: Get daily and monthly currency rates from Czech National Bank
|
140
|
+
description: Get daily and monthly currency rates from Czech National Bank.
|
98
141
|
email:
|
99
142
|
- zikan@uol.cz
|
143
|
+
- tomas@stepnivlk.net
|
100
144
|
executables: []
|
101
145
|
extensions: []
|
102
146
|
extra_rdoc_files: []
|
103
147
|
files:
|
104
148
|
- ".gitignore"
|
105
149
|
- ".rspec"
|
150
|
+
- ".ruby-gemset"
|
151
|
+
- ".ruby-version"
|
106
152
|
- ".travis.yml"
|
107
153
|
- Gemfile
|
108
154
|
- LICENSE
|
109
155
|
- README.md
|
156
|
+
- Rakefile
|
157
|
+
- bin/console
|
110
158
|
- cnb.gemspec
|
111
159
|
- lib/cnb.rb
|
112
|
-
- lib/cnb/
|
160
|
+
- lib/cnb/base.rb
|
161
|
+
- lib/cnb/config.rb
|
113
162
|
- lib/cnb/daily_rates.rb
|
114
163
|
- lib/cnb/monthly_rates.rb
|
115
164
|
- lib/cnb/version.rb
|
116
|
-
- spec/
|
165
|
+
- spec/cnb/daily_rates_spec.rb
|
166
|
+
- spec/cnb/monthly_rates_spec.rb
|
117
167
|
- spec/fixtures/daily_rates.xml
|
118
|
-
- spec/fixtures/
|
119
|
-
- spec/models/daily_rates_spec.rb
|
120
|
-
- spec/models/monthly_rates_spec.rb
|
121
|
-
- spec/spec_helper.rb
|
168
|
+
- spec/fixtures/monthly_rates.xml
|
122
169
|
homepage: http://www.uol.cz
|
123
170
|
licenses:
|
124
171
|
- MIT
|
@@ -126,8 +173,8 @@ metadata: {}
|
|
126
173
|
post_install_message:
|
127
174
|
rdoc_options: []
|
128
175
|
require_paths:
|
129
|
-
- lib
|
130
|
-
- config
|
176
|
+
- "'lib',"
|
177
|
+
- "'config'"
|
131
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
132
179
|
requirements:
|
133
180
|
- - ">="
|
@@ -140,12 +187,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
187
|
version: '0'
|
141
188
|
requirements: []
|
142
189
|
rubyforge_project:
|
143
|
-
rubygems_version: 2.
|
190
|
+
rubygems_version: 2.4.6
|
144
191
|
signing_key:
|
145
192
|
specification_version: 4
|
146
193
|
summary: CNB currency rates
|
147
194
|
test_files:
|
195
|
+
- spec/cnb/daily_rates_spec.rb
|
196
|
+
- spec/cnb/monthly_rates_spec.rb
|
148
197
|
- spec/fixtures/daily_rates.xml
|
149
|
-
- spec/fixtures/
|
150
|
-
- spec/models/daily_rates_spec.rb
|
151
|
-
- spec/models/monthly_rates_spec.rb
|
198
|
+
- spec/fixtures/monthly_rates.xml
|
data/lib/cnb/currency_rates.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
require 'nokogiri'
|
3
|
-
|
4
|
-
module CNB
|
5
|
-
class CurrencyRates
|
6
|
-
CUR_RATES_URL = 'http://www.cnb.cz/cs/financni_trhy/devizovy_trh/'
|
7
|
-
|
8
|
-
attr_reader :date, :currencies
|
9
|
-
|
10
|
-
def rate(cur_code)
|
11
|
-
get_currency(cur_code)[:rate]
|
12
|
-
end
|
13
|
-
|
14
|
-
def name(cur_code)
|
15
|
-
get_currency(cur_code)[:name]
|
16
|
-
end
|
17
|
-
|
18
|
-
def country(cur_code)
|
19
|
-
get_currency(cur_code)[:country]
|
20
|
-
end
|
21
|
-
|
22
|
-
protected
|
23
|
-
|
24
|
-
def get_currency(cur_code)
|
25
|
-
cur_code.upcase!
|
26
|
-
raise 'Currency with given code was not found in exchange rates list' unless @currencies[cur_code]
|
27
|
-
@currencies[cur_code]
|
28
|
-
end
|
29
|
-
|
30
|
-
def get_currencies
|
31
|
-
xml_doc = Nokogiri::XML(open(@cur_rates_url))
|
32
|
-
raise 'Currency rates are not available at the moment' if xml_doc.text.empty?
|
33
|
-
|
34
|
-
@date = Date.parse(xml_doc.css('kurzy').attr('datum').value)
|
35
|
-
|
36
|
-
xml_doc.css('radek').each do |currency|
|
37
|
-
amount = currency.attr('mnozstvi').to_f
|
38
|
-
rate = currency.attr('kurz').tr(',', '.').to_f
|
39
|
-
|
40
|
-
@currencies[currency.attr('kod')] = {
|
41
|
-
country: currency.attr('zeme'),
|
42
|
-
name: currency.attr('mena'),
|
43
|
-
rate: rate / amount
|
44
|
-
}
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/spec/cnb_spec.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe 'CNB' do
|
4
|
-
describe '#daily_rates' do
|
5
|
-
before(:each) do
|
6
|
-
CNB::DailyRates.any_instance.stub(:get_currencies) { {} }
|
7
|
-
end
|
8
|
-
|
9
|
-
it 'returns DailyRates object' do
|
10
|
-
expect(CNB.daily_rates).to be_a(CNB::DailyRates)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe '#monthly_rates' do
|
15
|
-
before(:each) do
|
16
|
-
CNB::MonthlyRates.any_instance.stub(:get_currencies) { {} }
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'returns MonthlyRates object' do
|
20
|
-
expect(CNB.monthly_rates(11,2013)).to be_a(CNB::MonthlyRates)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,130 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
2
|
-
<kurzy banka="CNB" datum="29.03.2013" poradi="3">
|
3
|
-
<tabulka typ="XML_TYP_CNB_KURZY_DEVIZOVEHO_TRHU">
|
4
|
-
<radek kod="AFN" mena="afghani" mnozstvi="100" kurz="38,167" zeme="Afghánistán"/>
|
5
|
-
<radek kod="ALL" mena="lek" mnozstvi="100" kurz="18,474" zeme="Albánie"/>
|
6
|
-
<radek kod="DZD" mena="dinár" mnozstvi="100" kurz="25,454" zeme="Alžírsko"/>
|
7
|
-
<radek kod="AOA" mena="kwanza" mnozstvi="100" kurz="20,964" zeme="Angola"/>
|
8
|
-
<radek kod="ARS" mena="peso" mnozstvi="1" kurz="3,921" zeme="Argentina"/>
|
9
|
-
<radek kod="AMD" mena="dram" mnozstvi="100" kurz="4,808" zeme="Arménie"/>
|
10
|
-
<radek kod="AWG" mena="gulden" mnozstvi="1" kurz="11,276" zeme="Aruba"/>
|
11
|
-
<radek kod="AZN" mena="manat" mnozstvi="1" kurz="25,622" zeme="Ázerbájdžán"/>
|
12
|
-
<radek kod="BSD" mena="dolar" mnozstvi="1" kurz="20,072" zeme="Bahamy"/>
|
13
|
-
<radek kod="BHD" mena="dinár" mnozstvi="1" kurz="53,246" zeme="Bahrajn"/>
|
14
|
-
<radek kod="BDT" mena="taka" mnozstvi="100" kurz="25,717" zeme="Bangladéš"/>
|
15
|
-
<radek kod="BBD" mena="dolar" mnozstvi="1" kurz="10,036" zeme="Barbados"/>
|
16
|
-
<radek kod="BZD" mena="dolar" mnozstvi="1" kurz="9,937" zeme="Belize"/>
|
17
|
-
<radek kod="BYR" mena="rubl" mnozstvi="100" kurz="0,233" zeme="Bělorusko"/>
|
18
|
-
<radek kod="BMD" mena="dolar" mnozstvi="1" kurz="20,072" zeme="Bermudy"/>
|
19
|
-
<radek kod="BTN" mena="ngultrum" mnozstvi="100" kurz="36,979" zeme="Bhútán"/>
|
20
|
-
<radek kod="BOB" mena="boliviano" mnozstvi="1" kurz="2,884" zeme="Bolivie"/>
|
21
|
-
<radek kod="BAM" mena="marka" mnozstvi="1" kurz="13,158" zeme="Bosna a Hercegovina"/>
|
22
|
-
<radek kod="BWP" mena="pula" mnozstvi="1" kurz="2,429" zeme="Botswana"/>
|
23
|
-
<radek kod="BND" mena="dolar" mnozstvi="1" kurz="16,179" zeme="Brunej"/>
|
24
|
-
<radek kod="BIF" mena="frank" mnozstvi="100" kurz="1,294" zeme="Burundi"/>
|
25
|
-
<radek kod="CVE" mena="escudo" mnozstvi="100" kurz="23,457" zeme="Cape Verde"/>
|
26
|
-
<radek kod="ANG" mena="gulden" mnozstvi="1" kurz="11,276" zeme="Curacao a St. Marteen"/>
|
27
|
-
<radek kod="DOP" mena="peso" mnozstvi="100" kurz="49,136" zeme="Dominikánská republika"/>
|
28
|
-
<radek kod="DJF" mena="frank" mnozstvi="100" kurz="11,489" zeme="Džibutsko"/>
|
29
|
-
<radek kod="EGP" mena="libra" mnozstvi="1" kurz="2,950" zeme="Egypt"/>
|
30
|
-
<radek kod="ERN" mena="nakfa" mnozstvi="1" kurz="1,379" zeme="Eritrea"/>
|
31
|
-
<radek kod="ETB" mena="birr" mnozstvi="1" kurz="1,090" zeme="Etiopie"/>
|
32
|
-
<radek kod="FKP" mena="libra" mnozstvi="1" kurz="30,520" zeme="Falklandy"/>
|
33
|
-
<radek kod="FJD" mena="dolar" mnozstvi="1" kurz="11,142" zeme="Fidži"/>
|
34
|
-
<radek kod="XPF" mena="frank CFP" mnozstvi="100" kurz="21,695" zeme="Francouzská Polynésie"/>
|
35
|
-
<radek kod="GMD" mena="dalasi" mnozstvi="100" kurz="62,725" zeme="Gambie"/>
|
36
|
-
<radek kod="GHS" mena="Ghana cedi" mnozstvi="1" kurz="10,360" zeme="Ghana"/>
|
37
|
-
<radek kod="GIP" mena="libra" mnozstvi="1" kurz="30,520" zeme="Gibraltar"/>
|
38
|
-
<radek kod="GEL" mena="lari" mnozstvi="1" kurz="12,108" zeme="Gruzie"/>
|
39
|
-
<radek kod="GTQ" mena="quetzal" mnozstvi="1" kurz="2,581" zeme="Guatemala"/>
|
40
|
-
<radek kod="GNF" mena="frank" mnozstvi="1000" kurz="2,896" zeme="Guinea"/>
|
41
|
-
<radek kod="GYD" mena="dolar" mnozstvi="100" kurz="9,926" zeme="Guyana"/>
|
42
|
-
<radek kod="HTG" mena="gourde" mnozstvi="100" kurz="47,228" zeme="Haiti"/>
|
43
|
-
<radek kod="HNL" mena="lempira" mnozstvi="1" kurz="1,024" zeme="Honduras"/>
|
44
|
-
<radek kod="CLP" mena="peso" mnozstvi="100" kurz="4,258" zeme="Chile"/>
|
45
|
-
<radek kod="IQD" mena="dinar" mnozstvi="1000" kurz="17,303" zeme="Irák"/>
|
46
|
-
<radek kod="IRR" mena="rial" mnozstvi="1000" kurz="1,637" zeme="Írán"/>
|
47
|
-
<radek kod="ISK" mena="koruna" mnozstvi="100" kurz="16,227" zeme="Island"/>
|
48
|
-
<radek kod="JMD" mena="dolar" mnozstvi="100" kurz="20,597" zeme="Jamajka"/>
|
49
|
-
<radek kod="YER" mena="rial" mnozstvi="100" kurz="9,368" zeme="Jemen"/>
|
50
|
-
<radek kod="JOD" mena="dinár" mnozstvi="1" kurz="28,354" zeme="Jordánsko"/>
|
51
|
-
<radek kod="KYD" mena="dolar" mnozstvi="1" kurz="24,478" zeme="Kajmanské ostrovy"/>
|
52
|
-
<radek kod="KHR" mena="riel" mnozstvi="1000" kurz="5,041" zeme="Kambodža"/>
|
53
|
-
<radek kod="QAR" mena="rial" mnozstvi="1" kurz="5,513" zeme="Katar"/>
|
54
|
-
<radek kod="KZT" mena="tenge" mnozstvi="100" kurz="13,302" zeme="Kazachstán"/>
|
55
|
-
<radek kod="KES" mena="šilink" mnozstvi="100" kurz="23,586" zeme="Keňa"/>
|
56
|
-
<radek kod="KPW" mena="won" mnozstvi="1" kurz="15,440" zeme="KLDR"/>
|
57
|
-
<radek kod="COP" mena="peso" mnozstvi="1000" kurz="11,016" zeme="Kolumbie"/>
|
58
|
-
<radek kod="KMF" mena="frank" mnozstvi="100" kurz="5,234" zeme="Komory"/>
|
59
|
-
<radek kod="CDF" mena="frank" mnozstvi="100" kurz="2,220" zeme="Konžská demokratická republika"/>
|
60
|
-
<radek kod="CRC" mena="colon" mnozstvi="100" kurz="4,027" zeme="Kostarika"/>
|
61
|
-
<radek kod="CUP" mena="peso" mnozstvi="1" kurz="20,072" zeme="Kuba"/>
|
62
|
-
<radek kod="KWD" mena="dinár" mnozstvi="1" kurz="70,478" zeme="Kuvajt"/>
|
63
|
-
<radek kod="KGS" mena="som" mnozstvi="100" kurz="42,465" zeme="Kyrgyzstán"/>
|
64
|
-
<radek kod="LAK" mena="kip" mnozstvi="1000" kurz="2,570" zeme="Laos"/>
|
65
|
-
<radek kod="LSL" mena="loti" mnozstvi="1" kurz="2,175" zeme="Lesotho"/>
|
66
|
-
<radek kod="LBP" mena="libra" mnozstvi="1000" kurz="13,372" zeme="Libanon"/>
|
67
|
-
<radek kod="LRD" mena="dolar" mnozstvi="100" kurz="27,216" zeme="Libérie"/>
|
68
|
-
<radek kod="LYD" mena="dinár" mnozstvi="1" kurz="15,664" zeme="Libye"/>
|
69
|
-
<radek kod="MOP" mena="pataca" mnozstvi="1" kurz="2,513" zeme="Macao"/>
|
70
|
-
<radek kod="MGA" mena="ariary" mnozstvi="1000" kurz="8,977" zeme="Madagaskar"/>
|
71
|
-
<radek kod="MKD" mena="denár" mnozstvi="100" kurz="42,301" zeme="Makedonie"/>
|
72
|
-
<radek kod="MWK" mena="kwacha" mnozstvi="100" kurz="5,282" zeme="Malawi"/>
|
73
|
-
<radek kod="MVR" mena="rufiya" mnozstvi="1" kurz="1,321" zeme="Maledivy"/>
|
74
|
-
<radek kod="MAD" mena="dirham" mnozstvi="1" kurz="2,321" zeme="Maroko"/>
|
75
|
-
<radek kod="MRO" mena="ouguiya" mnozstvi="100" kurz="7,299" zeme="Mauritánie"/>
|
76
|
-
<radek kod="MUR" mena="rupie" mnozstvi="100" kurz="64,644" zeme="Mauritius"/>
|
77
|
-
<radek kod="MDL" mena="leu" mnozstvi="1" kurz="1,625" zeme="Moldávie"/>
|
78
|
-
<radek kod="MNT" mena="tugrik" mnozstvi="100" kurz="1,439" zeme="Mongolsko"/>
|
79
|
-
<radek kod="MZN" mena="nový metical" mnozstvi="1000" kurz="669,067" zeme="Mosambik"/>
|
80
|
-
<radek kod="MMK" mena="kyat" mnozstvi="1" kurz="0,023" zeme="Myanmar"/>
|
81
|
-
<radek kod="NAD" mena="dolar" mnozstvi="1" kurz="2,175" zeme="Namibie"/>
|
82
|
-
<radek kod="NPR" mena="rupie" mnozstvi="100" kurz="23,242" zeme="Nepál"/>
|
83
|
-
<radek kod="NGN" mena="naira" mnozstvi="100" kurz="12,668" zeme="Nigérie"/>
|
84
|
-
<radek kod="NIO" mena="cordoba " mnozstvi="1" kurz="0,829" zeme="Nikaragua"/>
|
85
|
-
<radek kod="OMR" mena="rial" mnozstvi="1" kurz="52,139" zeme="Omán"/>
|
86
|
-
<radek kod="PKR" mena="rupie" mnozstvi="100" kurz="20,409" zeme="Pákistán"/>
|
87
|
-
<radek kod="PAB" mena="balboa" mnozstvi="1" kurz="20,072" zeme="Panama"/>
|
88
|
-
<radek kod="PGK" mena="kina" mnozstvi="1" kurz="9,103" zeme="Papua-Nová Quinea"/>
|
89
|
-
<radek kod="PYG" mena="guarani" mnozstvi="1000" kurz="5,018" zeme="Paraguay"/>
|
90
|
-
<radek kod="PEN" mena="nuevo sol" mnozstvi="1" kurz="7,754" zeme="Peru"/>
|
91
|
-
<radek kod="RWF" mena="frank" mnozstvi="100" kurz="3,186" zeme="Rwanda"/>
|
92
|
-
<radek kod="SVC" mena="colon" mnozstvi="1" kurz="2,296" zeme="Salvádor"/>
|
93
|
-
<radek kod="WST" mena="tala" mnozstvi="1" kurz="8,659" zeme="Samoa"/>
|
94
|
-
<radek kod="SAR" mena="riyal" mnozstvi="1" kurz="5,352" zeme="Saudská Arábie"/>
|
95
|
-
<radek kod="SCR" mena="rupie" mnozstvi="1" kurz="1,781" zeme="Seychely"/>
|
96
|
-
<radek kod="SLL" mena="leone" mnozstvi="1000" kurz="4,647" zeme="Sierra-Leone"/>
|
97
|
-
<radek kod="SOS" mena="šilink" mnozstvi="1000" kurz="13,231" zeme="Somálsko"/>
|
98
|
-
<radek kod="AED" mena="dirham" mnozstvi="1" kurz="5,465" zeme="Spojené arabské emiráty"/>
|
99
|
-
<radek kod="RSD" mena="dinár" mnozstvi="100" kurz="23,100" zeme="Srbsko"/>
|
100
|
-
<radek kod="LKR" mena="rupie" mnozstvi="100" kurz="15,842" zeme="Srí Lanka"/>
|
101
|
-
<radek kod="XAF" mena="frank CFA" mnozstvi="100" kurz="3,924" zeme="Státy střední Afriky"/>
|
102
|
-
<radek kod="XOF" mena="frank CFA" mnozstvi="100" kurz="3,924" zeme="Státy západní Afriky"/>
|
103
|
-
<radek kod="SDG" mena="libra" mnozstvi="1" kurz="4,562" zeme="Súdán"/>
|
104
|
-
<radek kod="SRD" mena="dolar" mnozstvi="1" kurz="6,176" zeme="Surinam"/>
|
105
|
-
<radek kod="SHP" mena="libra" mnozstvi="1" kurz="30,520" zeme="Svatá Helena"/>
|
106
|
-
<radek kod="STD" mena="dobra" mnozstvi="1000" kurz="1,083" zeme="Svatý Tomáš a Princův ostrov"/>
|
107
|
-
<radek kod="SZL" mena="lilangeni" mnozstvi="1" kurz="2,175" zeme="Svazijsko"/>
|
108
|
-
<radek kod="SYP" mena="libra" mnozstvi="100" kurz="28,503" zeme="Sýrie"/>
|
109
|
-
<radek kod="SBD" mena="dolar" mnozstvi="1" kurz="2,740" zeme="Šalomounovy ostrovy"/>
|
110
|
-
<radek kod="TJS" mena="somoni" mnozstvi="1" kurz="4,222" zeme="Tádžikistán"/>
|
111
|
-
<radek kod="TWD" mena="dolar" mnozstvi="100" kurz="67,333" zeme="Taiwan"/>
|
112
|
-
<radek kod="TZS" mena="šilink" mnozstvi="100" kurz="1,245" zeme="Tanzanie"/>
|
113
|
-
<radek kod="TOP" mena="pa`anga" mnozstvi="1" kurz="11,453" zeme="Tonga"/>
|
114
|
-
<radek kod="TTD" mena="dolar" mnozstvi="1" kurz="3,141" zeme="Trinidad a Tobago"/>
|
115
|
-
<radek kod="TND" mena="dinár" mnozstvi="1" kurz="12,596" zeme="Tunisko"/>
|
116
|
-
<radek kod="TMT" mena="nový manat" mnozstvi="1" kurz="7,055" zeme="Turkmenistán"/>
|
117
|
-
<radek kod="UGX" mena="šilink" mnozstvi="100" kurz="0,777" zeme="Uganda"/>
|
118
|
-
<radek kod="UAH" mena="hřivna" mnozstvi="1" kurz="2,468" zeme="Ukrajina"/>
|
119
|
-
<radek kod="UYU" mena="peso" mnozstvi="100" kurz="106,766" zeme="Uruguay"/>
|
120
|
-
<radek kod="UZS" mena="sum" mnozstvi="100" kurz="0,993" zeme="Uzbekistán"/>
|
121
|
-
<radek kod="VUV" mena="vatu" mnozstvi="100" kurz="22,128" zeme="Vanuatu"/>
|
122
|
-
<radek kod="VEF" mena="bolivar" mnozstvi="1" kurz="3,194" zeme="Venezuela"/>
|
123
|
-
<radek kod="VND" mena="dong" mnozstvi="1000" kurz="0,959" zeme="Vietnam"/>
|
124
|
-
<radek kod="TPE" mena="escudo" mnozstvi="1" kurz="20,072" zeme="Východní Timor"/>
|
125
|
-
<radek kod="XCD" mena="dolar" mnozstvi="1" kurz="7,518" zeme="Východokaribská oblast"/>
|
126
|
-
<radek kod="ZMW" mena="kwacha" mnozstvi="1" kurz="3,741" zeme="Zambie"/>
|
127
|
-
<radek kod="ZWL" mena="dolar" mnozstvi="1000" kurz="0,000" zeme="Zimbabwe"/>
|
128
|
-
</tabulka>
|
129
|
-
</kurzy>
|
130
|
-
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CNB::DailyRates do
|
4
|
-
before(:each) do
|
5
|
-
filepath = File.join('spec', 'fixtures', 'daily_rates.xml')
|
6
|
-
xml_doc = Nokogiri::XML(File.read(filepath))
|
7
|
-
Nokogiri::XML::Document.should_receive(:parse).and_return { xml_doc }
|
8
|
-
@parser = CNB::DailyRates.new
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'returns date from the exchange rates file' do
|
12
|
-
expect(@parser.date).to eq Date.parse('25.2.2014')
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#cur_rate' do
|
16
|
-
it 'returns currency rate' do
|
17
|
-
expect(@parser.rate('USD')).to eq(19.876)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'returns currency rate no matter the case of currency code' do
|
21
|
-
expect(@parser.rate('usd')).to eq(19.876)
|
22
|
-
end
|
23
|
-
|
24
|
-
it 'raises error if currency with given code is not included in the exchange rates file' do
|
25
|
-
expect { @parser.rate('USX') }.to raise_error(StandardError)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'returns country name' do
|
30
|
-
expect(@parser.name('USD')).to eq('dolar')
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'returns currency name' do
|
34
|
-
expect(@parser.country('USD')).to eq('USA')
|
35
|
-
end
|
36
|
-
end
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe CNB::MonthlyRates do
|
4
|
-
before(:each) do
|
5
|
-
filepath = File.join('spec', 'fixtures', 'monthly_rates_2013_03.xml')
|
6
|
-
xml_doc = Nokogiri::XML(File.read(filepath))
|
7
|
-
Nokogiri::XML::Document.should_receive(:parse).and_return { xml_doc }
|
8
|
-
@parser = CNB::MonthlyRates.new(3, 2013)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'raises error if required month is invalid' do
|
12
|
-
expect { CNB::MonthlyRates.new('abc', 2013) }.to raise_error(StandardError)
|
13
|
-
expect { CNB::MonthlyRates.new(0, 2013) }.to raise_error(StandardError)
|
14
|
-
expect { CNB::MonthlyRates.new(13, 2013) }.to raise_error(StandardError)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'raises error if required year is invalid' do
|
18
|
-
expect { CNB::MonthlyRates.new(3, 'abc') }.to raise_error(StandardError)
|
19
|
-
expect { CNB::MonthlyRates.new(3, 2000) }.to raise_error(StandardError)
|
20
|
-
expect { CNB::MonthlyRates.new(3, 2050) }.to raise_error(StandardError)
|
21
|
-
end
|
22
|
-
|
23
|
-
it 'returns date from the exchange rates file' do
|
24
|
-
expect(@parser.date).to eq Date.parse('29.3.2013')
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '#cur_rate' do
|
28
|
-
it 'returns currency rate' do
|
29
|
-
expect(@parser.rate('HNL')).to eq(1.024)
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'returns currency rate no matter the case of the currency code' do
|
33
|
-
expect(@parser.rate('hnl')).to eq(1.024)
|
34
|
-
end
|
35
|
-
|
36
|
-
it 'raises error if currency wth given code is not included in the exchange rates file' do
|
37
|
-
expect { @parser.rate('HNX') }.to raise_error(StandardError)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'returns country name' do
|
42
|
-
expect(@parser.country('HNL')).to eq('Honduras')
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'returns currency name' do
|
46
|
-
expect(@parser.name('HNL')).to eq('lempira')
|
47
|
-
end
|
48
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require "codeclimate-test-reporter"
|
3
|
-
CodeClimate::TestReporter.start
|
4
|
-
|
5
|
-
# COVERAGE=true rspec
|
6
|
-
if ENV['COVERAGE']
|
7
|
-
require 'simplecov'
|
8
|
-
SimpleCov.start
|
9
|
-
end
|
10
|
-
|
11
|
-
require 'cnb'
|
12
|
-
|
13
|
-
# Requires supporting ruby files with custom matchers and macros, etc,
|
14
|
-
# in spec/support/ and its subdirectories.
|
15
|
-
Dir[File.join('spec/support/**/*.rb')].each { |f| require f }
|
16
|
-
|
17
|
-
RSpec.configure do |config|
|
18
|
-
config.expect_with :rspec do |c|
|
19
|
-
# disable the `should` syntax
|
20
|
-
c.syntax = :expect
|
21
|
-
end
|
22
|
-
end
|