dejan-kurs 0.0.1 → 0.0.2
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 +16 -6
- data/README_en.rdoc +16 -6
- data/VERSION.yml +1 -1
- data/lib/kurs.rb +46 -7
- data/spec/fixtures/rate_list.rb +11 -0
- data/spec/kurs_spec.rb +35 -0
- data/spec/spec_helper.rb +4 -0
- metadata +14 -4
data/README.rdoc
CHANGED
@@ -13,15 +13,25 @@ http://www.nbs.yu/internet/latinica/scripts/ondate.html
|
|
13
13
|
|
14
14
|
== Instalacija
|
15
15
|
|
16
|
-
|
16
|
+
sudo gem install dejan-kurs --source http://gems.github.com
|
17
17
|
|
18
18
|
== Korišćenje
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
require "rubygems"
|
21
|
+
require "kurs"
|
22
|
+
|
23
|
+
>> Kurs.currency_codes
|
24
|
+
=> ["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"]
|
25
|
+
|
26
|
+
>> Kurs.rate_for(:eur) # moze i "EUR" ili :EUR
|
27
|
+
=> 93.8022
|
28
|
+
|
29
|
+
>> Kurs.rate_for(:usd)
|
30
|
+
=> 73.6802
|
31
|
+
|
32
|
+
>> Kurs.convert(2500, :usd => :eur)
|
33
|
+
=> 1963.71193852596
|
24
34
|
|
25
35
|
== Autor
|
26
36
|
|
27
|
-
Dejan Simic
|
37
|
+
{Dejan Simic}[http://rors.org]
|
data/README_en.rdoc
CHANGED
@@ -11,15 +11,25 @@ http://www.nbs.yu/internet/english/scripts/ondate.html
|
|
11
11
|
|
12
12
|
== Install
|
13
13
|
|
14
|
-
|
14
|
+
sudo gem install dejan-kurs --source http://gems.github.com
|
15
15
|
|
16
16
|
== Example usage
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
22
32
|
|
23
33
|
== Author
|
24
34
|
|
25
|
-
Dejan Simic
|
35
|
+
{Dejan Simic}[http://rors.org]
|
data/VERSION.yml
CHANGED
data/lib/kurs.rb
CHANGED
@@ -1,23 +1,49 @@
|
|
1
1
|
require 'httparty'
|
2
2
|
|
3
3
|
class Kurs
|
4
|
+
|
4
5
|
include HTTParty
|
5
6
|
base_uri "www.nbs.yu"
|
6
|
-
headers("User-Agent" => "kurs 0.0.1")
|
7
7
|
format :xml
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
#
|
10
|
+
# This is important!
|
11
|
+
# Without defined User-Agent nbs.yu returns status 404
|
12
|
+
#
|
13
|
+
headers("User-Agent" => "kurs")
|
14
|
+
|
15
|
+
#
|
16
|
+
# Value of provided currency in national currency (rsd)
|
17
|
+
#
|
18
|
+
# Example:
|
19
|
+
#
|
20
|
+
# => Kurs.rate_for(:usd)
|
21
|
+
# >> 75.2658
|
22
|
+
#
|
23
|
+
def self.rate_for(currency_code)
|
24
|
+
currency_code = currency_code.to_s.upcase
|
25
|
+
currency_code == 'RSD' ?
|
26
|
+
1 : currency_value_in_rsd(currency(currency_code))
|
13
27
|
end
|
14
28
|
|
29
|
+
#
|
30
|
+
# Converts money value from one currency to another
|
31
|
+
#
|
32
|
+
# Example:
|
33
|
+
#
|
34
|
+
# => Kurs.convert(2500, :usd => :eur)
|
35
|
+
# >> 1985.86099938682
|
36
|
+
#
|
15
37
|
def self.convert(value, source_target_hash)
|
16
38
|
source = source_target_hash.keys.first
|
17
39
|
target = source_target_hash.values.first
|
18
40
|
value * (rate_for(source) / rate_for(target))
|
19
41
|
end
|
20
42
|
|
43
|
+
def self.currency_codes
|
44
|
+
['RSD'] + currencies.map { |rate| rate['sifra_alfa3'] }
|
45
|
+
end
|
46
|
+
|
21
47
|
private
|
22
48
|
|
23
49
|
def self.rate_list
|
@@ -26,10 +52,23 @@ private
|
|
26
52
|
:datum => self.strf_today,
|
27
53
|
:eksport => "xml",
|
28
54
|
:lang => "sr",
|
29
|
-
:vrsta => "
|
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
|
30
68
|
end
|
31
69
|
|
32
70
|
def self.strf_today
|
33
71
|
Time.now.strftime("%d.%m.%Y") # "21.03.2009"
|
34
72
|
end
|
35
|
-
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,11 @@
|
|
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
ADDED
@@ -0,0 +1,35 @@
|
|
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
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: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dejan Simic
|
@@ -9,10 +9,19 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-02-
|
12
|
+
date: 2009-02-28 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
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:
|
16
25
|
description: Ruby API for converting currency using official exchange rate list of National Bank Of Serbia
|
17
26
|
email: desimic@gmail.com
|
18
27
|
executables: []
|
@@ -27,6 +36,7 @@ files:
|
|
27
36
|
- VERSION.yml
|
28
37
|
- lib/kurs.rb
|
29
38
|
- spec/fixtures
|
39
|
+
- spec/fixtures/rate_list.rb
|
30
40
|
- spec/kurs_spec.rb
|
31
41
|
- spec/spec_helper.rb
|
32
42
|
has_rdoc: true
|