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 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 konvertovanje valute po zvaničnom srednjem kursu dinara Narodne Banke Srbije
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
- >> 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
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
@@ -1,5 +1,5 @@
1
1
  ---
2
- :major: 0
2
+ :major: 1
3
3
  :minor: 0
4
- :patch: 2
4
+ :patch: 1
5
5
 
data/lib/kurs.rb CHANGED
@@ -1,74 +1,31 @@
1
- require 'httparty'
1
+ require 'open-uri'
2
+ require 'hpricot'
2
3
 
3
4
  class Kurs
4
-
5
- include HTTParty
6
- base_uri "www.nbs.yu"
7
- format :xml
8
-
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))
27
- end
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
- #
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
@@ -0,0 +1,5 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class KursTest < Test::Unit::TestCase
4
+
5
+ end
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'rr'
4
+
5
+ require File.dirname(__FILE__) + '/../lib/kurs'
6
+
7
+ class Test::Unit::TestCase
8
+ include RR::Adapters::TestUnit
9
+ end
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.2
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-02-28 00:00:00 -08:00
12
+ date: 2009-05-10 00:00:00 -07:00
13
13
  default_executable:
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:
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
- - spec/fixtures
39
- - spec/fixtures/rate_list.rb
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]
@@ -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
@@ -1,4 +0,0 @@
1
- require 'rubygems'
2
-
3
- require File.dirname(__FILE__) + '/../lib/kurs'
4
- require File.dirname(__FILE__) + '/fixtures/rate_list'