money_bank_sources 0.0.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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +10 -0
- data/lib/money/bank_sources.rb +1 -0
- data/lib/money/bank_sources/cbar_az.rb +68 -0
- data/lib/money_bank_sources.rb +2 -0
- data/lib/money_bank_sources/railtie.rb +7 -0
- data/lib/money_bank_sources/tasks/cbar_az.rake +7 -0
- data/lib/money_bank_sources/version.rb +3 -0
- data/money_bank_sources.gemspec +26 -0
- data/test/cbar_az_test.rb +124 -0
- data/test/fixtures/cbar_az.xml +2 -0
- metadata +71 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "money/bank_sources/cbar_az"
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require "open-uri"
|
2
|
+
require "rexml/document"
|
3
|
+
|
4
|
+
class Money
|
5
|
+
module BankSources
|
6
|
+
class CbarAz
|
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
|
+
def initialize(options = {})
|
15
|
+
@date = options[:date] || Date.today
|
16
|
+
@bank = options[:bank] || Money.default_bank
|
17
|
+
@only = options[:only] ? Array(options[:only]) : nil
|
18
|
+
@data = options[:data]
|
19
|
+
@rates = {}
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse
|
23
|
+
xml.elements.each("ValCurs/ValType/Valute") do |currency|
|
24
|
+
code = currency.attributes["Code"]
|
25
|
+
|
26
|
+
code = CODE_MAP.fetch(code, code)
|
27
|
+
next if skip_code?(code)
|
28
|
+
|
29
|
+
rate = currency.elements["Value"].text.to_f
|
30
|
+
rates[code] = rate
|
31
|
+
end
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
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
|
+
def url
|
46
|
+
@url ||= "http://cbar.az/currencies/#{formatted_date}.xml"
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def formatted_date
|
52
|
+
@formatted_date ||= @date.strftime("%d.%m.%Y")
|
53
|
+
end
|
54
|
+
|
55
|
+
def data
|
56
|
+
@data ||= open(url).read
|
57
|
+
end
|
58
|
+
|
59
|
+
def xml
|
60
|
+
@xml ||= REXML::Document.new(data)
|
61
|
+
end
|
62
|
+
|
63
|
+
def skip_code?(code)
|
64
|
+
@only && !@only.include?(code)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "money_bank_sources/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "money_bank_sources"
|
7
|
+
s.version = MoneyBankSources::VERSION
|
8
|
+
s.authors = ["Semyon Perepelitsa"]
|
9
|
+
s.email = ["sema@sema.in"]
|
10
|
+
s.homepage = "https://github.com/semaperepelitsa/money_bank_sources"
|
11
|
+
s.summary = %q{Adds bank sources to Money gem}
|
12
|
+
# s.description = %q{TODO: Write a gem description}
|
13
|
+
|
14
|
+
s.rubyforge_project = "money_bank_sources"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency "money"
|
22
|
+
|
23
|
+
# specify any dependencies here; for example:
|
24
|
+
# s.add_development_dependency "rspec"
|
25
|
+
# s.add_runtime_dependency "rest-client"
|
26
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require "bundler/setup"
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'money'
|
4
|
+
$:.unshift(File.expand_path('../../lib', __FILE__))
|
5
|
+
require "money/bank_sources/cbar_az"
|
6
|
+
|
7
|
+
class MoneyBankSourceCbarAzTest < MiniTest::Unit::TestCase
|
8
|
+
include Money::BankSources
|
9
|
+
|
10
|
+
def test_store_adds_direct_and_reverse_rates
|
11
|
+
bank = MiniTest::Mock.new
|
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)
|
19
|
+
|
20
|
+
source = CbarAz.new(:bank => bank)
|
21
|
+
def source.rates
|
22
|
+
{ "USD" => 2, "EUR" => 4 }
|
23
|
+
end
|
24
|
+
|
25
|
+
source.store!
|
26
|
+
bank.verify
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_store_unknown_currency_silently
|
30
|
+
bank = Money::Bank::VariableExchange.new
|
31
|
+
source = CbarAz.new(:bank => bank)
|
32
|
+
def source.rates
|
33
|
+
{ "AAA" => 4 }
|
34
|
+
end
|
35
|
+
source.store!
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_url
|
39
|
+
date = Date.new(2011, 01, 02)
|
40
|
+
source = CbarAz.new(:date => date)
|
41
|
+
assert_equal "http://cbar.az/currencies/02.01.2011.xml", source.url
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_url_with_default_date
|
45
|
+
date = Date.today
|
46
|
+
source = CbarAz.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 = CbarAz.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 = CbarAz.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 = CbarAz.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/cbar_az.xml", __FILE__))
|
70
|
+
end
|
71
|
+
|
72
|
+
def parsed_data
|
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
|
+
}
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,2 @@
|
|
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>
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: money_bank_sources
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Semyon Perepelitsa
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: money
|
16
|
+
requirement: &70311994243560 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70311994243560
|
25
|
+
description:
|
26
|
+
email:
|
27
|
+
- sema@sema.in
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- Rakefile
|
35
|
+
- lib/money/bank_sources.rb
|
36
|
+
- lib/money/bank_sources/cbar_az.rb
|
37
|
+
- lib/money_bank_sources.rb
|
38
|
+
- lib/money_bank_sources/railtie.rb
|
39
|
+
- lib/money_bank_sources/tasks/cbar_az.rake
|
40
|
+
- lib/money_bank_sources/version.rb
|
41
|
+
- money_bank_sources.gemspec
|
42
|
+
- test/cbar_az_test.rb
|
43
|
+
- test/fixtures/cbar_az.xml
|
44
|
+
homepage: https://github.com/semaperepelitsa/money_bank_sources
|
45
|
+
licenses: []
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubyforge_project: money_bank_sources
|
64
|
+
rubygems_version: 1.8.11
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: Adds bank sources to Money gem
|
68
|
+
test_files:
|
69
|
+
- test/cbar_az_test.rb
|
70
|
+
- test/fixtures/cbar_az.xml
|
71
|
+
has_rdoc:
|