rk_fx_rates 0.1.0 → 0.1.1
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/lib/rk_fx_rates.rb +9 -3
- data/lib/rk_fx_rates/provider/ecb.rb +3 -0
- data/lib/rk_fx_rates/version.rb +1 -1
- data/spec/lib/rk_fx_rates_spec.rb +8 -9
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 225f06ee6d4cc91ec236835358e7045a474fa735
|
4
|
+
data.tar.gz: d0808a1d0c945e5bcc8cd57f910465be741ee812
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdb068e5b17f183941b755930f1c95c8f9a9d62b3afb57fb98eddbaad4788585bca9cd632443a67b52eb9f7e424da2a3cb58a8ffb81c3f434c24f8e8c991e321
|
7
|
+
data.tar.gz: 5a714ffb902a523ccc9dd301fc37c883ae1fefbc373b3760e7e2d6522ba5e80d618dcab508c6b5bb2618c0caf7988beab0dd271c647cfb3e37c24f3ac0eb4ae1
|
data/lib/rk_fx_rates.rb
CHANGED
@@ -23,11 +23,14 @@ module RkFxRates
|
|
23
23
|
class ExchangeRate
|
24
24
|
include HTTParty
|
25
25
|
|
26
|
+
|
27
|
+
# Load Ecb as default provider
|
26
28
|
def initialize(source = RkFxRates::Provider::Ecb)
|
27
29
|
@source = source
|
28
30
|
@fx_hash = retrieve
|
29
31
|
end
|
30
32
|
|
33
|
+
# Only download the latest update when the stored data is outdated or not available
|
31
34
|
def retrieve
|
32
35
|
retrieve_latest unless File.exists?('exchange_rates.store')
|
33
36
|
fx_hash = YAML::load_file('exchange_rates.store')['rates']
|
@@ -46,6 +49,7 @@ module RkFxRates
|
|
46
49
|
return fx_hash
|
47
50
|
end
|
48
51
|
|
52
|
+
# calculates the rate by converting to EUR first
|
49
53
|
def at(date, from_currency, to_currency)
|
50
54
|
return to_euro(date, from_currency) * from_euro(date, to_currency)
|
51
55
|
end
|
@@ -54,8 +58,9 @@ module RkFxRates
|
|
54
58
|
@fx_hash["data"].first[1].keys
|
55
59
|
end
|
56
60
|
|
61
|
+
# returns collection in Ruby::Date format
|
57
62
|
def available_dates
|
58
|
-
|
63
|
+
@fx_hash["data"].keys
|
59
64
|
end
|
60
65
|
|
61
66
|
private
|
@@ -76,5 +81,6 @@ module RkFxRates
|
|
76
81
|
store['rates'] = fx_hash
|
77
82
|
end
|
78
83
|
end
|
79
|
-
|
80
|
-
end
|
84
|
+
|
85
|
+
end # class ExchangeRate
|
86
|
+
end # module RkFxRates
|
@@ -1,11 +1,14 @@
|
|
1
1
|
module RkFxRates
|
2
2
|
module Provider
|
3
|
+
|
4
|
+
# Exchange rates over the last 90 days rom the European Central Bank
|
3
5
|
class Ecb
|
4
6
|
|
5
7
|
def self.data_url
|
6
8
|
return 'http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml'
|
7
9
|
end
|
8
10
|
|
11
|
+
# convert xml to a defined default format
|
9
12
|
# see rk_fx_rates.rb for data structure description
|
10
13
|
def self.generate_fx_hash(data)
|
11
14
|
fx_hash = Hash.new
|
data/lib/rk_fx_rates/version.rb
CHANGED
@@ -3,6 +3,9 @@ require 'spec_helper'
|
|
3
3
|
describe RkFxRates do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
+
# too slow
|
7
|
+
# File.delete('exchange_rates.store')
|
8
|
+
@date = Chronic.parse('last monday').to_date
|
6
9
|
@fx_api = RkFxRates::ExchangeRate.new
|
7
10
|
end
|
8
11
|
|
@@ -17,18 +20,16 @@ describe RkFxRates do
|
|
17
20
|
# using the last monday to make sure the test runs with a weekday date
|
18
21
|
# simplified case with Euro as the start currency
|
19
22
|
it "should calcute the Exchange rate from EUR to USD" do
|
20
|
-
date
|
21
|
-
@fx_api.at( date, 'EUR', 'USD' ).should be > 1.2
|
23
|
+
@fx_api.at( @date, 'EUR', 'USD' ).should be > 1.2
|
22
24
|
end
|
23
25
|
|
24
26
|
it "should calculate the exchange rate from GBP to USD" do
|
25
|
-
date
|
26
|
-
@fx_api.at(date, 'GBP', 'USD').should be > 1.5
|
27
|
+
@fx_api.at( @date, 'GBP', 'USD').should be > 1.5
|
27
28
|
end
|
28
29
|
|
29
30
|
it "should calculate the exchange rate from EUR to EUR" do
|
30
31
|
date = Chronic.parse('last monday').to_date
|
31
|
-
@fx_api.at(date, 'EUR', 'EUR').should be == 1.0
|
32
|
+
@fx_api.at( @date, 'EUR', 'EUR').should be == 1.0
|
32
33
|
end
|
33
34
|
|
34
35
|
it "should provide a list with the available currencies" do
|
@@ -36,8 +37,7 @@ describe RkFxRates do
|
|
36
37
|
end
|
37
38
|
|
38
39
|
it "should provide a list with the available dates" do
|
39
|
-
|
40
|
-
@fx_api.available_dates.should include(date)
|
40
|
+
@fx_api.available_dates.should include(@date)
|
41
41
|
end
|
42
42
|
|
43
43
|
context "with existing and current data" do
|
@@ -47,8 +47,7 @@ describe RkFxRates do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should not download the data again" do
|
50
|
-
date
|
51
|
-
@fx_api.at(date, 'GBP', 'USD').should be > 1.5
|
50
|
+
@fx_api.at( @date, 'GBP', 'USD').should be > 1.5
|
52
51
|
end
|
53
52
|
|
54
53
|
after(:each) do
|