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 CHANGED
@@ -13,15 +13,25 @@ http://www.nbs.yu/internet/latinica/scripts/ondate.html
13
13
 
14
14
  == Instalacija
15
15
 
16
- sudo gem install dejan-kurs --source http://gems.github.com
16
+ sudo gem install dejan-kurs --source http://gems.github.com
17
17
 
18
18
  == Korišćenje
19
19
 
20
- require "rubygems"
21
- require "kurs"
22
-
23
- Kurs.convert(2500, :usd => :eur)
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 ~ http://rors.org
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
- sudo gem install dejan-kurs --source http://gems.github.com
14
+ sudo gem install dejan-kurs --source http://gems.github.com
15
15
 
16
16
  == Example usage
17
17
 
18
- require "rubygems"
19
- require "kurs"
20
-
21
- Kurs.convert(2500, :usd => :eur)
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 ~ http://rors.org
35
+ {Dejan Simic}[http://rors.org]
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
3
  :minor: 0
4
- :patch: 1
4
+ :patch: 2
5
5
 
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
- def self.rate_for(val)
10
- kurs = Kurs.rate_list["kursna_lista"]["valuta"]
11
- eur = kurs.detect { |v| v["sifra_alfa3"] == val.to_s.upcase }
12
- eur["kupovni"].sub(',', '.').to_f
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 => "1"})
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
- end
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
@@ -0,0 +1,4 @@
1
+ require 'rubygems'
2
+
3
+ require File.dirname(__FILE__) + '/../lib/kurs'
4
+ require File.dirname(__FILE__) + '/fixtures/rate_list'
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.1
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-22 00:00:00 -08:00
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