money_bank_sources 0.0.2 → 0.1.0.alpha
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.
- data/lib/money/bank_sources/az_central_bank.rb +8 -29
- data/lib/money_bank_sources/tasks/az_central_bank.rake +4 -1
- data/lib/money_bank_sources/version.rb +1 -1
- data/test/az_central_bank_test.rb +22 -101
- data/test/fixtures/two.xml +15 -0
- data/test/fixtures/unknown.xml +10 -0
- metadata +18 -10
- data/test/fixtures/az_central_bank.xml +0 -2
@@ -4,49 +4,32 @@ require "rexml/document"
|
|
4
4
|
class Money
|
5
5
|
module BankSources
|
6
6
|
class AzCentralBank
|
7
|
-
CODE_MAP = {
|
8
|
-
# RUR is an old roubles code according to ISO 4217
|
9
|
-
"RUR" => "RUB"
|
10
|
-
}
|
11
|
-
|
12
|
-
attr_reader :rates
|
13
|
-
|
14
7
|
def initialize(options = {})
|
15
8
|
@date = options[:date] || Date.today
|
16
9
|
@bank = options[:bank] || Money.default_bank
|
17
|
-
@only = options[:only] ? Array(options[:only]) : nil
|
18
10
|
@data = options[:data]
|
19
|
-
@rates = {}
|
20
11
|
end
|
21
12
|
|
22
13
|
def parse
|
23
14
|
xml.elements.each("ValCurs/ValType/Valute") do |currency|
|
24
15
|
code = currency.attributes["Code"]
|
25
|
-
|
26
|
-
code = CODE_MAP.fetch(code, code)
|
27
|
-
next if skip_code?(code)
|
28
|
-
|
29
16
|
rate = currency.elements["Value"].text.to_f
|
30
|
-
|
17
|
+
add_rate code, rate
|
31
18
|
end
|
32
19
|
self
|
33
20
|
end
|
34
21
|
|
35
|
-
def store!
|
36
|
-
rates.each do |code, rate|
|
37
|
-
if Money::Currency.find(code)
|
38
|
-
@bank.add_rate(code, :azn, rate)
|
39
|
-
@bank.add_rate(:azn, code, 1.0/rate)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
@bank.save! if @bank.respond_to?(:save!)
|
43
|
-
end
|
44
|
-
|
45
22
|
def url
|
46
23
|
@url ||= "http://cbar.az/currencies/#{formatted_date}.xml"
|
47
24
|
end
|
48
25
|
|
49
|
-
|
26
|
+
private
|
27
|
+
|
28
|
+
def add_rate code, rate
|
29
|
+
@bank.add_rate(code, :azn, rate)
|
30
|
+
@bank.add_rate(:azn, code, 1.0/rate)
|
31
|
+
rescue Currency::UnknownCurrency
|
32
|
+
end
|
50
33
|
|
51
34
|
def formatted_date
|
52
35
|
@formatted_date ||= @date.strftime("%d.%m.%Y")
|
@@ -59,10 +42,6 @@ class Money
|
|
59
42
|
def xml
|
60
43
|
@xml ||= REXML::Document.new(data)
|
61
44
|
end
|
62
|
-
|
63
|
-
def skip_code?(code)
|
64
|
-
@only && !@only.include?(code)
|
65
|
-
end
|
66
45
|
end
|
67
46
|
end
|
68
47
|
end
|
@@ -2,7 +2,10 @@ namespace :bank_sources do
|
|
2
2
|
namespace :az_central_bank do
|
3
3
|
task :fetch => :environment do
|
4
4
|
require "money/bank_sources/az_central_bank"
|
5
|
-
Money::BankSources::AzCentralBank.new(:date => Time.zone.today).parse
|
5
|
+
Money::BankSources::AzCentralBank.new(:date => Time.zone.today).parse
|
6
|
+
Money.default_bank.export_rates
|
6
7
|
end
|
7
8
|
end
|
9
|
+
|
10
|
+
task :fetch => "az_central_bank:fetch"
|
8
11
|
end
|
@@ -5,34 +5,30 @@ $:.unshift(File.expand_path('../../lib', __FILE__))
|
|
5
5
|
require "money/bank_sources/az_central_bank"
|
6
6
|
|
7
7
|
class MoneyBankSourceAzCentralBankTest < MiniTest::Unit::TestCase
|
8
|
-
include Money::BankSources
|
8
|
+
include Money::BankSources, Money::Bank
|
9
9
|
|
10
|
-
def
|
11
|
-
bank =
|
12
|
-
|
13
|
-
bank.expect(:add_rate, nil, ["USD", :azn, 2])
|
14
|
-
bank.expect(:add_rate, nil, [:azn, "USD", 0.5])
|
15
|
-
bank.expect(:add_rate, nil, ["EUR", :azn, 4])
|
16
|
-
bank.expect(:add_rate, nil, [:azn, "EUR", 0.25])
|
17
|
-
|
18
|
-
bank.expect(:save!, true)
|
10
|
+
def setup
|
11
|
+
@bank = VariableExchange.new
|
12
|
+
end
|
19
13
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
def test_ignores_unknown_currency
|
15
|
+
source = AzCentralBank.new :data => fixture(:unknown), :bank => @bank
|
16
|
+
refute Money::Currency.find(:sdr)
|
17
|
+
source.parse
|
18
|
+
end
|
24
19
|
|
25
|
-
|
26
|
-
bank
|
20
|
+
def test_adds_rates
|
21
|
+
source = AzCentralBank.new :data => fixture(:two), :bank => @bank
|
22
|
+
source.parse
|
23
|
+
assert_equal 0.0245, @bank.get_rate(:rub, :azn)
|
24
|
+
assert_equal 1.2166, @bank.get_rate(:gbp, :azn)
|
27
25
|
end
|
28
26
|
|
29
|
-
def
|
30
|
-
|
31
|
-
source
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
source.store!
|
27
|
+
def test_adds_reverse_rates
|
28
|
+
source = AzCentralBank.new :data => fixture(:two), :bank => @bank
|
29
|
+
source.parse
|
30
|
+
assert_in_delta 40.8163, @bank.get_rate(:azn, :rub)
|
31
|
+
assert_in_delta 0.8219, @bank.get_rate(:azn, :gbp)
|
36
32
|
end
|
37
33
|
|
38
34
|
def test_url
|
@@ -41,84 +37,9 @@ class MoneyBankSourceAzCentralBankTest < MiniTest::Unit::TestCase
|
|
41
37
|
assert_equal "http://cbar.az/currencies/02.01.2011.xml", source.url
|
42
38
|
end
|
43
39
|
|
44
|
-
|
45
|
-
date = Date.today
|
46
|
-
source = AzCentralBank.new
|
47
|
-
assert_equal "http://cbar.az/currencies/#{date.strftime("%d.%m.%Y")}.xml", source.url
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_parse
|
51
|
-
source = AzCentralBank.new(:data => data)
|
52
|
-
assert_equal source, source.parse
|
53
|
-
assert_equal parsed_data, source.rates
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_parse_only
|
57
|
-
source = AzCentralBank.new(:only => "USD", :data => data)
|
58
|
-
assert_equal({ "USD" => parsed_data["USD"] }, source.parse.rates)
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_only_multiple
|
62
|
-
source = AzCentralBank.new(:only => ["USD", "EUR"], :data => data)
|
63
|
-
assert_equal({ "USD" => parsed_data["USD"], "EUR" => parsed_data["EUR"] }, source.parse.rates)
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def data
|
69
|
-
@data ||= IO.read(File.expand_path("../fixtures/az_central_bank.xml", __FILE__))
|
70
|
-
end
|
40
|
+
private
|
71
41
|
|
72
|
-
def
|
73
|
-
{
|
74
|
-
"ZAR"=>0.0963,
|
75
|
-
"AED"=>0.2142,
|
76
|
-
"IDR"=>0.0087,
|
77
|
-
"SDR"=>1.2269,
|
78
|
-
"KGS"=>0.0174,
|
79
|
-
"CHF"=>0.8639,
|
80
|
-
"HKD"=>0.1009,
|
81
|
-
"NZD"=>0.6072,
|
82
|
-
"INR"=>0.0159,
|
83
|
-
"ARS"=>0.1873,
|
84
|
-
"LVL"=>1.4877,
|
85
|
-
"KWD"=>2.836,
|
86
|
-
"EUR"=>1.0553,
|
87
|
-
"MXN"=>0.0576,
|
88
|
-
"UZS"=>0.0452,
|
89
|
-
"GEL"=>0.4735,
|
90
|
-
"EGP"=>0.1318,
|
91
|
-
"SEK"=>0.1132,
|
92
|
-
"CNY"=>0.1232,
|
93
|
-
"SAR"=>0.2098,
|
94
|
-
"RUB"=>0.0245,
|
95
|
-
"LTL"=>0.3081,
|
96
|
-
"LBP"=>0.0523,
|
97
|
-
"DKK"=>0.1418,
|
98
|
-
"KRW"=>0.0664,
|
99
|
-
"TMT"=>0.2767,
|
100
|
-
"KZT"=>0.0053,
|
101
|
-
"BYR"=>0.0142,
|
102
|
-
"TRY"=>0.429,
|
103
|
-
"SGD"=>0.6037,
|
104
|
-
"ILS"=>0.2115,
|
105
|
-
"AUD"=>0.7663,
|
106
|
-
"BRL"=>0.4292,
|
107
|
-
"UAH"=>0.0983,
|
108
|
-
"CAD"=>0.7619,
|
109
|
-
"USD"=>0.7869,
|
110
|
-
"TJS"=>0.1651,
|
111
|
-
"PLN"=>0.2409,
|
112
|
-
"JPY"=>1.0298,
|
113
|
-
"CZK"=>0.0428,
|
114
|
-
"IRR"=>0.0073,
|
115
|
-
"MDL"=>0.066,
|
116
|
-
"NOK"=>0.1342,
|
117
|
-
"GBP"=>1.2166,
|
118
|
-
"XPD"=>518.5671,
|
119
|
-
"XAU"=>1329.0741,
|
120
|
-
"XPT"=>1299.1719,
|
121
|
-
"XAG"=>25.889
|
122
|
-
}
|
42
|
+
def fixture name
|
43
|
+
@data ||= IO.read(File.expand_path("../fixtures/#{name}.xml", __FILE__))
|
123
44
|
end
|
124
45
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ValCurs Date="26.09.2011" Name="AZN məzənnələri" Description="Azərbaycan Respublikası Mərkəzi Bankının 26.09.2011 tarixdən etibarən xarici valyutaların və bank metallarının Azərbaycan manatına qarşı rəsmi məzənnələri bülleteni">
|
3
|
+
<ValType Type="Xarici valyutalar">
|
4
|
+
<Valute Code="RUB">
|
5
|
+
<Nominal>1</Nominal>
|
6
|
+
<Name>Rusiya rublu</Name>
|
7
|
+
<Value>0.0245 </Value>
|
8
|
+
</Valute>
|
9
|
+
<Valute Code="GBP">
|
10
|
+
<Nominal>1</Nominal>
|
11
|
+
<Name>İngilis funt sterlinqi</Name>
|
12
|
+
<Value>1.2166 </Value>
|
13
|
+
</Valute>
|
14
|
+
</ValType>
|
15
|
+
</ValCurs>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ValCurs Date="26.09.2011" Name="AZN məzənnələri" Description="Azərbaycan Respublikası Mərkəzi Bankının 26.09.2011 tarixdən etibarən xarici valyutaların və bank metallarının Azərbaycan manatına qarşı rəsmi məzənnələri bülleteni">
|
3
|
+
<ValType Type="Xarici valyutalar">
|
4
|
+
<Valute Code="SDR">
|
5
|
+
<Nominal>1</Nominal>
|
6
|
+
<Name>SDR (BVF-nun xüsusi borcalma hüquqları)</Name>
|
7
|
+
<Value>1.2269 </Value>
|
8
|
+
</Valute>
|
9
|
+
</ValType>
|
10
|
+
</ValCurs>
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: money_bank_sources
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0.alpha
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Semyon Perepelitsa
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: money
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,12 @@ dependencies:
|
|
21
21
|
version: '4'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '4'
|
25
30
|
description:
|
26
31
|
email:
|
27
32
|
- sema@sema.in
|
@@ -40,7 +45,8 @@ files:
|
|
40
45
|
- lib/money_bank_sources/version.rb
|
41
46
|
- money_bank_sources.gemspec
|
42
47
|
- test/az_central_bank_test.rb
|
43
|
-
- test/fixtures/
|
48
|
+
- test/fixtures/two.xml
|
49
|
+
- test/fixtures/unknown.xml
|
44
50
|
homepage: https://github.com/semaperepelitsa/money_bank_sources
|
45
51
|
licenses: []
|
46
52
|
post_install_message:
|
@@ -56,15 +62,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
62
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
63
|
none: false
|
58
64
|
requirements:
|
59
|
-
- - ! '
|
65
|
+
- - ! '>'
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
67
|
+
version: 1.3.1
|
62
68
|
requirements: []
|
63
69
|
rubyforge_project: money_bank_sources
|
64
|
-
rubygems_version: 1.8.
|
70
|
+
rubygems_version: 1.8.23
|
65
71
|
signing_key:
|
66
72
|
specification_version: 3
|
67
73
|
summary: Adds bank sources to Money gem
|
68
74
|
test_files:
|
69
75
|
- test/az_central_bank_test.rb
|
70
|
-
- test/fixtures/
|
76
|
+
- test/fixtures/two.xml
|
77
|
+
- test/fixtures/unknown.xml
|
78
|
+
has_rdoc:
|
@@ -1,2 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<ValCurs Date="26.09.2011" Name="AZN məzənnələri" Description="Azərbaycan Respublikası Mərkəzi Bankının 26.09.2011 tarixdən etibarən xarici valyutaların və bank metallarının Azərbaycan manatına qarşı rəsmi məzənnələri bülleteni"><ValType Type="Xarici valyutalar"><Valute Code="ZAR"><Nominal>1</Nominal><Name>Cənubi Afrika randı</Name><Value>0.0963 </Value></Valute><Valute Code="AED"><Nominal>1</Nominal><Name>BƏƏ dirhəmi</Name><Value>0.2142 </Value></Valute><Valute Code="IDR"><Nominal>100</Nominal><Name>İndoneziya rupiası</Name><Value>0.0087 </Value></Valute><Valute Code="SDR"><Nominal>1</Nominal><Name>SDR (BVF-nun xüsusi borcalma hüquqları)</Name><Value>1.2269 </Value></Valute><Valute Code="KGS"><Nominal>1</Nominal><Name>Qırğız somu</Name><Value>0.0174 </Value></Valute><Valute Code="CHF"><Nominal>1</Nominal><Name>İsveçrə frankı</Name><Value>0.8639 </Value></Valute><Valute Code="HKD"><Nominal>1</Nominal><Name>Honq Konq dolları</Name><Value>0.1009 </Value></Valute><Valute Code="NZD"><Nominal>1</Nominal><Name>Yeni Zelandiya dolları</Name><Value>0.6072 </Value></Valute><Valute Code="INR"><Nominal>1</Nominal><Name>Hindistan rupisi</Name><Value>0.0159 </Value></Valute><Valute Code="ARS"><Nominal>1</Nominal><Name>Argentina pesosu</Name><Value>0.1873 </Value></Valute><Valute Code="LVL"><Nominal>1</Nominal><Name>Latviya latı</Name><Value>1.4877 </Value></Valute><Valute Code="KWD"><Nominal>1</Nominal><Name>Küveyt dinarı</Name><Value>2.8360 </Value></Valute><Valute Code="EUR"><Nominal>1</Nominal><Name>Avro</Name><Value>1.0553 </Value></Valute><Valute Code="MXN"><Nominal>1</Nominal><Name>Meksika pesosu</Name><Value>0.0576 </Value></Valute><Valute Code="UZS"><Nominal>100</Nominal><Name>Özbək somu</Name><Value>0.0452 </Value></Valute><Valute Code="GEL"><Nominal>1</Nominal><Name>Gürcü larisi</Name><Value>0.4735 </Value></Valute><Valute Code="EGP"><Nominal>1</Nominal><Name>Misir funtu</Name><Value>0.1318 </Value></Valute><Valute Code="SEK"><Nominal>1</Nominal><Name>İsveç kronu</Name><Value>0.1132 </Value></Valute><Valute Code="CNY"><Nominal>1</Nominal><Name>Çin yuanı</Name><Value>0.1232 </Value></Valute><Valute Code="SAR"><Nominal>1</Nominal><Name>Səudiyyə Ərəbistanı rialı</Name><Value>0.2098 </Value></Valute><Valute Code="RUR"><Nominal>1</Nominal><Name>Rusiya rublu</Name><Value>0.0245 </Value></Valute><Valute Code="LTL"><Nominal>1</Nominal><Name>Litva liti</Name><Value>0.3081 </Value></Valute><Valute Code="LBP"><Nominal>100</Nominal><Name>Livan funtu</Name><Value>0.0523 </Value></Valute><Valute Code="DKK"><Nominal>1</Nominal><Name>Danimarka kronu</Name><Value>0.1418 </Value></Valute><Valute Code="KRW"><Nominal>100</Nominal><Name>Cənubi Korea vonu</Name><Value>0.0664 </Value></Valute><Valute Code="TMT"><Nominal>1</Nominal><Name>Yeni türkmən manatı</Name><Value>0.2767 </Value></Valute><Valute Code="KZT"><Nominal>1</Nominal><Name>Qazaxıstan tengəsi</Name><Value>0.0053 </Value></Valute><Valute Code="BYR"><Nominal>100</Nominal><Name>Belarus rublu</Name><Value>0.0142 </Value></Valute><Valute Code="TRY"><Nominal>1</Nominal><Name>Türk lirəsi</Name><Value>0.4290 </Value></Valute><Valute Code="SGD"><Nominal>1</Nominal><Name>Sinqapur dolları</Name><Value>0.6037 </Value></Valute><Valute Code="ILS"><Nominal>1</Nominal><Name>İsrail şekeli</Name><Value>0.2115 </Value></Valute><Valute Code="AUD"><Nominal>1</Nominal><Name>Avstraliya dolları</Name><Value>0.7663 </Value></Valute><Valute Code="BRL"><Nominal>1</Nominal><Name>Braziliya rialı</Name><Value>0.4292 </Value></Valute><Valute Code="UAH"><Nominal>1</Nominal><Name>Ukrayna qrivnası</Name><Value>0.0983 </Value></Valute><Valute Code="CAD"><Nominal>1</Nominal><Name>Kanada dolları</Name><Value>0.7619 </Value></Valute><Valute Code="USD"><Nominal>1</Nominal><Name>ABŞ dolları</Name><Value>0.7869 </Value></Valute><Valute Code="TJS"><Nominal>1</Nominal><Name>Tacik somonisi</Name><Value>0.1651 </Value></Valute><Valute Code="PLN"><Nominal>1</Nominal><Name>Polşa zlotası</Name><Value>0.2409 </Value></Valute><Valute Code="JPY"><Nominal>100</Nominal><Name>Yapon yeni</Name><Value>1.0298 </Value></Valute><Valute Code="CZK"><Nominal>1</Nominal><Name>Çexiya kronu</Name><Value>0.0428 </Value></Valute><Valute Code="IRR"><Nominal>100</Nominal><Name>İran rialı</Name><Value>0.0073 </Value></Valute><Valute Code="MDL"><Nominal>1</Nominal><Name>Moldova leyi</Name><Value>0.0660 </Value></Valute><Valute Code="NOK"><Nominal>1</Nominal><Name>Norveç kronu</Name><Value>0.1342 </Value></Valute><Valute Code="GBP"><Nominal>1</Nominal><Name>İngilis funt sterlinqi</Name><Value>1.2166 </Value></Valute></ValType><ValType Type="Bank metalları"><Valute Code="XPD"><Nominal>1 t.u.</Nominal><Name>Palladium</Name><Value>518.5671 </Value></Valute><Valute Code="XAU"><Nominal>1 t.u.</Nominal><Name>Qızıl</Name><Value>1329.0741 </Value></Valute><Valute Code="XPT"><Nominal>1 t.u.</Nominal><Name>Platin</Name><Value>1299.1719 </Value></Valute><Valute Code="XAG"><Nominal>1 t.u.</Nominal><Name>Gümüş</Name><Value>25.8890 </Value></Valute></ValType></ValCurs>
|