currency_spy 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,4 @@
1
1
  module CurrencySpy
2
- VERSION = "0.0.1"
2
+ # Stores the version of the currency_spy gem
3
+ VERSION = "0.0.3"
3
4
  end
@@ -0,0 +1,43 @@
1
+ module CurrencySpy
2
+ # A class designed to fetch medium currency rates from Walutomat.pl a social currency exchange platform.
3
+ class Walutomat < CurrencySpy::Scraper
4
+
5
+ # Constructor method.
6
+ # Initializes the following:
7
+ # * a url of the source
8
+ # * and the name of the source
9
+ # * a list of currency codes available
10
+ def initialize
11
+ super
12
+ @url = 'http://www.walutomat.pl/rates.php'
13
+ @institution = 'Walutomat'
14
+ @available_codes = %w(EUR USD GBP CHF)
15
+ end
16
+
17
+ # Fetch medium rate which is calculated based on current transactions in Walutomat
18
+ def medium_rate
19
+ regexp = Regexp.new("#{currency_code} / PLN")
20
+ res = nil
21
+ page.search("//td[@name='pair']").each do |td|
22
+ if (regexp.match(td.content))
23
+ res = td.next_element.content.to_f
24
+ end
25
+ end
26
+ return res
27
+ end
28
+
29
+ # The hour of the rate
30
+ def rate_time
31
+ regexp = Regexp.new(currency_code)
32
+ time_regexp = Regexp.new(/\d+:\d+/)
33
+ res = nil
34
+ page.search("//td[@name='pair']").each do |td|
35
+ if (regexp.match(td.content))
36
+ hour = td.next_element.next_element.content
37
+ res = DateTime.parse(hour)
38
+ end
39
+ end
40
+ return res
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ describe "A DnbNord scraper instance" do
4
+ before :each do
5
+ @scraper = CurrencySpy::DnbNord.new
6
+ end
7
+
8
+ it "should return the name of the institution" do
9
+ @scraper.institution.should == "DnB Nord"
10
+ end
11
+
12
+ it "should have a proper url defined" do
13
+ @scraper.session_no = 1
14
+ @scraper.url.should == 'http://www.dnbnord.pl/pl/tabela-kursow-walut-dla-kredytow/go:godzina=08:15'
15
+ @scraper.session_no = 2
16
+ @scraper.url.should == 'http://www.dnbnord.pl/pl/tabela-kursow-walut-dla-kredytow/go:godzina=12:15'
17
+ end
18
+
19
+ it "should contain a list of available currency codes" do
20
+ @scraper.available_codes.should_not be_nil
21
+ end
22
+
23
+ it "should return currency values" do
24
+ @scraper.session_no = 1
25
+ @scraper.fetch_rates.should_not be_nil
26
+ @scraper.fetch_rates.length.should == 3
27
+ @scraper.buy_rate.should == @scraper.fetch_rates[:buy_rate]
28
+ @scraper.sell_rate.should == @scraper.fetch_rates[:sell_rate]
29
+ @scraper.rate_time.should == @scraper.fetch_rates[:rate_time]
30
+ end
31
+
32
+ it "should return a buy rate smaller than the sell rate" do
33
+ @scraper.buy_rate.should < @scraper.sell_rate
34
+ end
35
+
36
+ it "should return buy rate as a float" do
37
+ @scraper.fetch_rates[:buy_rate].should be_a_kind_of(Float)
38
+ end
39
+
40
+ it "should return sell rate as a float" do
41
+ @scraper.fetch_rates[:sell_rate].should be_a_kind_of(Float)
42
+ end
43
+
44
+ it "should return rate time as a DateTime instance" do
45
+ @scraper.fetch_rates[:rate_time].should be_a_kind_of(DateTime)
46
+ end
47
+ end
data/spec/nbp_spec.rb CHANGED
@@ -5,10 +5,18 @@ describe "A Nbp scraper instance" do
5
5
  @scraper = CurrencySpy::Nbp.new
6
6
  end
7
7
 
8
+ it "should return the name of the institution" do
9
+ @scraper.institution.should == "Narodowy Bank Polski"
10
+ end
11
+
8
12
  it "should have a proper url defined" do
9
13
  @scraper.url.should == 'http://www.nbp.pl/home.aspx?f=/kursy/kursyc.html'
10
14
  end
11
15
 
16
+ it "should contain a list of available currency codes" do
17
+ @scraper.available_codes.should_not be_nil
18
+ end
19
+
12
20
  it "should return currency values" do
13
21
  @scraper.fetch_rates.should_not be_nil
14
22
  @scraper.fetch_rates.length.should == 3
data/spec/scraper_spec.rb CHANGED
@@ -1,32 +1,42 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "A Scraper class" do
4
- it "Should have a list of available currency codes" do
5
- CurrencySpy::Scraper::AVAILABLE_CODES.should_not be_empty
6
- end
7
- end
8
-
9
- describe "An instance of scraper" do
3
+ describe "A plain instance of scraper" do
10
4
  before :each do
11
5
  @scraper = CurrencySpy::Scraper.new
12
6
  end
13
7
 
14
- it "should raise an exception if fetch_rate is called on Scraper class instance" do
15
- lambda {@scraper.fetch_rates("XYZ")}.should raise_error(Exception, "This method should be invoked from CurrencySpy::Scraper sub class")
8
+ it "should not contain a list of available currency codes" do
9
+ @scraper.available_codes.should be_nil
16
10
  end
17
11
 
18
- it "should raise an exception if an abstract method is called" do
19
- lambda {@scraper.buy_rate}.should raise_error(NotImplementedError)
20
- lambda {@scraper.sell_rate}.should raise_error(NotImplementedError)
21
- lambda {@scraper.rate_time}.should raise_error(NotImplementedError)
12
+ it "should raise an exception if fetch_rate is called on Scraper class instance" do
13
+ @scraper.currency_code = "XYZ"
14
+ lambda {@scraper.fetch_rates}.should raise_error(Exception, "This method should be invoked from CurrencySpy::Scraper sub class")
22
15
  end
23
16
 
24
- it "should allow to read the mechanize parser" do
25
- @scraper.parser.should_not be_nil
26
- @scraper.parser.should be_a_kind_of Mechanize
17
+ it "should not parse any pages" do
18
+ @scraper.page.should be_nil
27
19
  end
28
20
 
29
21
  it "should assign default properties" do
30
22
  @scraper.url.should be_nil
31
23
  end
32
24
  end
25
+
26
+ describe "An instance of a scraper with an URI" do
27
+ before :each do
28
+ @scraper = CurrencySpy::Scraper.new
29
+ @scraper.url = 'http://www.google.com'
30
+ end
31
+
32
+ it "should return a Mechanize::Page instance on a call to page" do
33
+ @scraper.page.should_not be_nil
34
+ @scraper.page.should be_a_kind_of Mechanize::Page
35
+ end
36
+
37
+ it "should reload the page object if necessary" do
38
+ cached = @scraper.page
39
+ @scraper.page.should equal cached
40
+ @scraper.page(reload = true).should_not equal cached
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe "A Walutomat scraper instance" do
4
+ before :each do
5
+ @scraper = CurrencySpy::Walutomat.new
6
+ end
7
+
8
+ it "should return the name of the institution" do
9
+ @scraper.institution.should == "Walutomat"
10
+ end
11
+
12
+ it "should have a proper url defined" do
13
+ @scraper.url.should == 'http://www.walutomat.pl/rates.php'
14
+ end
15
+
16
+ it "should contain a list of available currency codes" do
17
+ @scraper.available_codes.should_not be_nil
18
+ end
19
+
20
+ it "should return currency values" do
21
+ @scraper.fetch_rates.should_not be_nil
22
+ @scraper.fetch_rates.length.should == 2
23
+ @scraper.medium_rate.should == @scraper.fetch_rates[:medium_rate]
24
+ end
25
+
26
+ it "should return a medium rate as a float" do
27
+ @scraper.fetch_rates[:medium_rate].should be_a_kind_of(Float)
28
+ end
29
+
30
+ it "should return rate time as a DateTime instance" do
31
+ @scraper.fetch_rates[:rate_time].should be_a_kind_of(DateTime)
32
+ end
33
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1
9
- version: 0.0.1
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Lukasz Badura
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-08 00:00:00 +01:00
17
+ date: 2011-01-12 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -43,6 +43,19 @@ dependencies:
43
43
  version: "0"
44
44
  type: :runtime
45
45
  version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :runtime
58
+ version_requirements: *id003
46
59
  description: A simple gem to parse and fetch currency rates from different websites.
47
60
  email:
48
61
  - lukasz@niebo.net
@@ -60,13 +73,40 @@ files:
60
73
  - README.rdoc
61
74
  - Rakefile
62
75
  - currency_spy.gemspec
76
+ - doc/CurrencySpy.html
77
+ - doc/CurrencySpy/DnbNord.html
78
+ - doc/CurrencySpy/Nbp.html
79
+ - doc/CurrencySpy/Scraper.html
80
+ - doc/CurrencySpy/Walutomat.html
81
+ - doc/Gemfile.html
82
+ - doc/LICENSE.html
83
+ - doc/README_rdoc.html
84
+ - doc/Rakefile.html
85
+ - doc/created.rid
86
+ - doc/index.html
87
+ - doc/lib/currency_spy/dnb_nord_rb.html
88
+ - doc/lib/currency_spy/nbp_rb.html
89
+ - doc/lib/currency_spy/scraper_rb.html
90
+ - doc/lib/currency_spy/version_rb.html
91
+ - doc/lib/currency_spy/walutomat_rb.html
92
+ - doc/lib/currency_spy_rb.html
93
+ - doc/rdoc.css
94
+ - doc/spec/dnb_nord_spec_rb.html
95
+ - doc/spec/nbp_spec_rb.html
96
+ - doc/spec/scraper_spec_rb.html
97
+ - doc/spec/spec_helper_rb.html
98
+ - doc/spec/walutomat_spec_rb.html
63
99
  - lib/currency_spy.rb
100
+ - lib/currency_spy/dnb_nord.rb
64
101
  - lib/currency_spy/nbp.rb
65
102
  - lib/currency_spy/scraper.rb
66
103
  - lib/currency_spy/version.rb
104
+ - lib/currency_spy/walutomat.rb
105
+ - spec/dnb_nord_spec.rb
67
106
  - spec/nbp_spec.rb
68
107
  - spec/scraper_spec.rb
69
108
  - spec/spec_helper.rb
109
+ - spec/walutomat_spec.rb
70
110
  has_rdoc: true
71
111
  homepage: http://rubygems.org/gems/currency_spy
72
112
  licenses: []
@@ -100,6 +140,8 @@ signing_key:
100
140
  specification_version: 3
101
141
  summary: A gem to fetch currency rates.
102
142
  test_files:
143
+ - spec/dnb_nord_spec.rb
103
144
  - spec/nbp_spec.rb
104
145
  - spec/scraper_spec.rb
105
146
  - spec/spec_helper.rb
147
+ - spec/walutomat_spec.rb