dejan-kurs 0.0.2 → 1.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/README.rdoc +13 -21
- data/VERSION.yml +2 -2
- data/lib/kurs.rb +29 -72
- data/test/kurs_test.rb +5 -0
- data/test/test_helper.rb +9 -0
- metadata +6 -18
- data/README_en.rdoc +0 -35
- data/spec/fixtures/rate_list.rb +0 -11
- data/spec/kurs_spec.rb +0 -35
- data/spec/spec_helper.rb +0 -4
data/README.rdoc
CHANGED
@@ -1,15 +1,6 @@
|
|
1
|
-
note: Following text is in Serbian. Read {English version of this document}[http://github.com/dejan/kurs/tree/master/README_en.rdoc] instead.
|
2
|
-
|
3
1
|
= kurs
|
4
2
|
|
5
|
-
Ruby API za
|
6
|
-
|
7
|
-
http://www.nbs.yu/internet/latinica/scripts/ondate.html
|
8
|
-
|
9
|
-
== Zahtevi
|
10
|
-
|
11
|
-
* {ruby}[http://www.ruby-lang.org]
|
12
|
-
* {httparty}[http://github.com/jnunemaker/httparty]
|
3
|
+
Ruby API za vrednosti valuta (za sada samo EUR, USD, CHF i GBP) po kursu (kupovnom, prodajnom i srednjem) domaćih banaka
|
13
4
|
|
14
5
|
== Instalacija
|
15
6
|
|
@@ -19,18 +10,19 @@ http://www.nbs.yu/internet/latinica/scripts/ondate.html
|
|
19
10
|
|
20
11
|
require "rubygems"
|
21
12
|
require "kurs"
|
13
|
+
|
14
|
+
# banke:
|
15
|
+
>> Kurs.lista.keys
|
16
|
+
=> ["Banca Intesa", "Vojvođanska Banka", "Findomestic Banka", "Société Générale Banka", "Raiffeisen banka", "Meridian Bank", "Komercijalna banka", "Narodna Banka Srbije"]
|
22
17
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
>>
|
27
|
-
=>
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
>> Kurs.convert(2500, :usd => :eur)
|
33
|
-
=> 1963.71193852596
|
18
|
+
# konvertovanje po podacima NBS
|
19
|
+
>> nbs = Kurs.lista['Narodna Banka Srbije']
|
20
|
+
=> {"kupovni"=>{"CHF"=>62.5359, "EUR"=>94.6169, "USD"=>70.6465, "GBP"=>106.0371}, "datum"=>"08.05.2009.", "srednji"=>{"CHF"=>62.7242, "EUR"=>94.9017, "USD"=>70.8592, "GBP"=>106.3563}, "prodajni"=>{"CHF"=>62.9124, "EUR"=>95.1864, "USD"=>71.0717, "GBP"=>106.6754}}
|
21
|
+
>> (1500 * nbs['prodajni']['USD']) / nbs['kupovni']['EUR']
|
22
|
+
=> 1126.72841743917
|
23
|
+
|
24
|
+
# datum
|
25
|
+
>> Kurs.lista['Raiffeisen banka']['datum']
|
34
26
|
|
35
27
|
== Autor
|
36
28
|
|
data/VERSION.yml
CHANGED
data/lib/kurs.rb
CHANGED
@@ -1,74 +1,31 @@
|
|
1
|
-
require '
|
1
|
+
require 'open-uri'
|
2
|
+
require 'hpricot'
|
2
3
|
|
3
4
|
class Kurs
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
#
|
32
|
-
# Example:
|
33
|
-
#
|
34
|
-
# => Kurs.convert(2500, :usd => :eur)
|
35
|
-
# >> 1985.86099938682
|
36
|
-
#
|
37
|
-
def self.convert(value, source_target_hash)
|
38
|
-
source = source_target_hash.keys.first
|
39
|
-
target = source_target_hash.values.first
|
40
|
-
value * (rate_for(source) / rate_for(target))
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.currency_codes
|
44
|
-
['RSD'] + currencies.map { |rate| rate['sifra_alfa3'] }
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def self.rate_list
|
50
|
-
@@rate_list ||= post('/system/modules/yu.nbs.kl/kllatinica/kursnaLista.html?lang=sr',
|
51
|
-
:body => {
|
52
|
-
:datum => self.strf_today,
|
53
|
-
:eksport => "xml",
|
54
|
-
:lang => "sr",
|
55
|
-
:vrsta => "3"})
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.currency(currency_code)
|
59
|
-
currencies.detect { |v| v["sifra_alfa3"] == currency_code }
|
60
|
-
end
|
61
|
-
|
62
|
-
def self.currencies
|
63
|
-
rate_list["kursna_lista"]["valuta"]
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.currency_value_in_rsd(currency)
|
67
|
-
currency["srednji"].sub(',', '.').to_f
|
68
|
-
end
|
69
|
-
|
70
|
-
def self.strf_today
|
71
|
-
Time.now.strftime("%d.%m.%Y") # "21.03.2009"
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
5
|
+
|
6
|
+
def self.lista
|
7
|
+
@@kurs
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.refresh
|
11
|
+
@@kurs = {}
|
12
|
+
%w{EUR USD CHF GBP}.each do |valuta|
|
13
|
+
doc = Hpricot(open("http://www.kursna-lista.com/kursne-liste-banaka-i-menjacnica?valuta=#{valuta}"))
|
14
|
+
(doc/'#curFullTable tr').each do |tr|
|
15
|
+
banka = (tr/'td:nth(0)').inner_text.gsub(/\s*a.d.|\s*Beograd|\s*Srbija/, '')
|
16
|
+
next if banka.empty? || banka =~ /Menja/
|
17
|
+
@@kurs[banka] ||= {}
|
18
|
+
@@kurs[banka]['kupovni'] ||= {}
|
19
|
+
@@kurs[banka]['srednji'] ||= {}
|
20
|
+
@@kurs[banka]['prodajni'] ||= {}
|
21
|
+
@@kurs[banka]['kupovni'][valuta] = (tr/'td:nth(1)').inner_text.to_f
|
22
|
+
@@kurs[banka]['srednji'][valuta] = (tr/'td:nth(2)').inner_text.to_f
|
23
|
+
@@kurs[banka]['prodajni'][valuta] = (tr/'td:nth(3)').inner_text.to_f
|
24
|
+
@@kurs[banka]['datum'] = (tr/'td:nth(5)').inner_text
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# on load
|
30
|
+
refresh
|
31
|
+
end
|
data/test/kurs_test.rb
ADDED
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dejan-kurs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dejan Simic
|
@@ -9,19 +9,10 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-10 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
16
|
-
name: httparty
|
17
|
-
type: :runtime
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: "0"
|
24
|
-
version:
|
14
|
+
dependencies: []
|
15
|
+
|
25
16
|
description: Ruby API for converting currency using official exchange rate list of National Bank Of Serbia
|
26
17
|
email: desimic@gmail.com
|
27
18
|
executables: []
|
@@ -32,13 +23,10 @@ extra_rdoc_files: []
|
|
32
23
|
|
33
24
|
files:
|
34
25
|
- README.rdoc
|
35
|
-
- README_en.rdoc
|
36
26
|
- VERSION.yml
|
37
27
|
- lib/kurs.rb
|
38
|
-
-
|
39
|
-
-
|
40
|
-
- spec/kurs_spec.rb
|
41
|
-
- spec/spec_helper.rb
|
28
|
+
- test/kurs_test.rb
|
29
|
+
- test/test_helper.rb
|
42
30
|
has_rdoc: true
|
43
31
|
homepage: http://github.com/dejan/kurs
|
44
32
|
post_install_message:
|
data/README_en.rdoc
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
= kurs
|
2
|
-
|
3
|
-
Ruby API for converting currency using official exchange rate list of National Bank Of Serbia
|
4
|
-
|
5
|
-
http://www.nbs.yu/internet/english/scripts/ondate.html
|
6
|
-
|
7
|
-
== Requirements
|
8
|
-
|
9
|
-
* {ruby}[http://www.ruby-lang.org]
|
10
|
-
* {httparty}[http://github.com/jnunemaker/httparty]
|
11
|
-
|
12
|
-
== Install
|
13
|
-
|
14
|
-
sudo gem install dejan-kurs --source http://gems.github.com
|
15
|
-
|
16
|
-
== Example usage
|
17
|
-
|
18
|
-
require "rubygems"
|
19
|
-
require "kurs"
|
20
|
-
|
21
|
-
>> Kurs.currency_codes
|
22
|
-
=> ["RSD", "EUR", "AUD", "CAD", "HRK", "CZK", "DKK", "HUF", "JPY", "KWD", "NOK", "SEK", "CHF", "GBP", "USD", "BAM", "PLN", "ATS", "BEF", "FIM", "FRF", "DEM", "GRD", "IEP", "ITL", "LUF", "PTE", "ESP"]
|
23
|
-
|
24
|
-
>> Kurs.rate_for(:eur) # will work with "EUR" or :EUR
|
25
|
-
=> 93.8022
|
26
|
-
|
27
|
-
>> Kurs.rate_for(:usd)
|
28
|
-
=> 73.6802
|
29
|
-
|
30
|
-
>> Kurs.convert(2500, :usd => :eur)
|
31
|
-
=> 1963.71193852596
|
32
|
-
|
33
|
-
== Author
|
34
|
-
|
35
|
-
{Dejan Simic}[http://rors.org]
|
data/spec/fixtures/rate_list.rb
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
module Fixtures
|
2
|
-
|
3
|
-
#
|
4
|
-
# Result is the hash that httparty returns
|
5
|
-
# after posting and parsing (format :xml)
|
6
|
-
#
|
7
|
-
def example_rate_list
|
8
|
-
{"kursna_lista"=>{"valuta"=>[{"sifra_alfa3"=>"EUR", "srednji"=>"94,7521", "sifra_num"=>"978", "naziv_zemlje"=>"Evropska unija", "paritet"=>"1"}, {"sifra_alfa3"=>"AUD", "srednji"=>"47,9636", "sifra_num"=>"36", "naziv_zemlje"=>"Australija", "paritet"=>"1"}, {"sifra_alfa3"=>"CAD", "srednji"=>"59,6150", "sifra_num"=>"124", "naziv_zemlje"=>"Kanada", "paritet"=>"1"}, {"sifra_alfa3"=>"HRK", "srednji"=>"12,6655", "sifra_num"=>"191", "naziv_zemlje"=>"Hrvatska", "paritet"=>"1"}, {"sifra_alfa3"=>"CZK", "srednji"=>"3,2805", "sifra_num"=>"203", "naziv_zemlje"=>"Češka Republika", "paritet"=>"1"}, {"sifra_alfa3"=>"DKK", "srednji"=>"12,7126", "sifra_num"=>"208", "naziv_zemlje"=>"Danska", "paritet"=>"1"}, {"sifra_alfa3"=>"HUF", "srednji"=>"31,1306", "sifra_num"=>"348", "naziv_zemlje"=>"Mađarska", "paritet"=>"100"}, {"sifra_alfa3"=>"JPY", "srednji"=>"79,9461", "sifra_num"=>"392", "naziv_zemlje"=>"Japan", "paritet"=>"100"}, {"sifra_alfa3"=>"KWD", "srednji"=>"256,3639", "sifra_num"=>"414", "naziv_zemlje"=>"Kuvajt", "paritet"=>"1"}, {"sifra_alfa3"=>"NOK", "srednji"=>"10,8519", "sifra_num"=>"578", "naziv_zemlje"=>"Norveška", "paritet"=>"1"}, {"sifra_alfa3"=>"SEK", "srednji"=>"8,5527", "sifra_num"=>"752", "naziv_zemlje"=>"Švedska", "paritet"=>"1"}, {"sifra_alfa3"=>"CHF", "srednji"=>"63,7332", "sifra_num"=>"756", "naziv_zemlje"=>"Švajcarska", "paritet"=>"1"}, {"sifra_alfa3"=>"GBP", "srednji"=>"107,0887", "sifra_num"=>"826", "naziv_zemlje"=>"Velika Britanija", "paritet"=>"1"}, {"sifra_alfa3"=>"USD", "srednji"=>"75,2658", "sifra_num"=>"840", "naziv_zemlje"=>"SAD", "paritet"=>"1"}, {"sifra_alfa3"=>"BAM", "srednji"=>"48,4460", "sifra_num"=>"977", "naziv_zemlje"=>"Bosna i Hercegovina", "paritet"=>"1"}, {"sifra_alfa3"=>"PLN", "srednji"=>"19,8230", "sifra_num"=>"985", "naziv_zemlje"=>"Poljska", "paritet"=>"1"}, {"sifra_alfa3"=>"ATS", "srednji"=>"6,8859", "sifra_num"=>"40", "naziv_zemlje"=>"Austrija", "paritet"=>"1"}, {"sifra_alfa3"=>"BEF", "srednji"=>"234,8843", "sifra_num"=>"56", "naziv_zemlje"=>"Belgija", "paritet"=>"100"}, {"sifra_alfa3"=>"FIM", "srednji"=>"15,9362", "sifra_num"=>"246", "naziv_zemlje"=>"Finska", "paritet"=>"1"}, {"sifra_alfa3"=>"FRF", "srednji"=>"14,4449", "sifra_num"=>"250", "naziv_zemlje"=>"Francuska", "paritet"=>"1"}, {"sifra_alfa3"=>"DEM", "srednji"=>"48,4460", "sifra_num"=>"280", "naziv_zemlje"=>"Nemačka", "paritet"=>"1"}, {"sifra_alfa3"=>"GRD", "srednji"=>"27,8069", "sifra_num"=>"300", "naziv_zemlje"=>"Grčka", "paritet"=>"100"}, {"sifra_alfa3"=>"IEP", "srednji"=>"120,3103", "sifra_num"=>"372", "naziv_zemlje"=>"Irska", "paritet"=>"1"}, {"sifra_alfa3"=>"ITL", "srednji"=>"4,8935", "sifra_num"=>"380", "naziv_zemlje"=>"Italija", "paritet"=>"100"}, {"sifra_alfa3"=>"LUF", "srednji"=>"234,8843", "sifra_num"=>"442", "naziv_zemlje"=>"Luksemburg", "paritet"=>"100"}, {"sifra_alfa3"=>"PTE", "srednji"=>"47,2621", "sifra_num"=>"620", "naziv_zemlje"=>"Portugalija", "paritet"=>"100"}, {"sifra_alfa3"=>"ESP", "srednji"=>"56,9472", "sifra_num"=>"724", "naziv_zemlje"=>"Španija", "paritet"=>"100"}], "zaglavlje"=>{"Copyright"=>"\n S obzirom na tehničke mogućnosti mreže - Narodna banka Srbije ne može da tvrdi da su prezentovani podaci i informacije kompletni i pouzdani. Samo oni podaci i informacije koje se štampaju direktno sa računara Narodne banke Srbije (bez posredstva mreže) - pouzdani su, tačni i kompletni. Narodna banka Srbije ne odgovara za eventualnu štetu nastalu korišćenjem podataka sa ovog sajta. Narodna banka Srbije dozvoljava da se fajlovi sa njenog sajta snimaju, reprodukuju i distribuiraju - pod uslovom da se njihova sadržina ne menja i da se izvor svaki put vidljivo navede. Narodna banka Srbije upozorava da je zabranjena i nezakonita svaka neovlašćena promena podataka sa njenog sajta, njihovo brisanje ili uništenje, činjenje nedostupnim ili namerno izazvana šteta. Narodna banka Srbije zadržava sva prava.\n ", "broj"=>"33", "datum_formiranja"=>"20.02.2009", "vrsta"=>"za zvanični srednji kurs dinara"}}}
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|
data/spec/kurs_spec.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
-
|
3
|
-
describe Kurs do
|
4
|
-
|
5
|
-
include Fixtures
|
6
|
-
|
7
|
-
describe 'rate_for' do
|
8
|
-
it "should be 1 for RSD" do
|
9
|
-
Kurs.rate_for(:rsd).should == 1
|
10
|
-
Kurs.rate_for(:RSD).should == 1
|
11
|
-
Kurs.rate_for('RSD').should == 1
|
12
|
-
Kurs.rate_for('rsd').should == 1
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe 'convert' do
|
17
|
-
it "should be product of value and division of source and target rate" do
|
18
|
-
Kurs.should_receive(:rate_for).with(:eur).twice.and_return 90
|
19
|
-
Kurs.should_receive(:rate_for).with(:usd).twice.and_return 80
|
20
|
-
Kurs.convert(1000, :eur => :usd).should == 1000 * (90 / 80)
|
21
|
-
Kurs.convert(1000, :usd => :eur).should == 1000 * (80 / 90)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe "currency_codes" do
|
26
|
-
it "should be array where first element is 'RSD' and the rest are sifra_alfa3 values of currencies" do
|
27
|
-
Kurs.should_receive(:currencies).and_return([
|
28
|
-
mock(Object, :[] => "EUR"),
|
29
|
-
mock(Object, :[] => "USD"),
|
30
|
-
])
|
31
|
-
Kurs.currency_codes.should == ["RSD", "EUR", "USD"]
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
data/spec/spec_helper.rb
DELETED