fixer 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec CHANGED
@@ -1 +1 @@
1
- -cfd
1
+ --color
data/.rvmrc CHANGED
@@ -1,2 +1 @@
1
1
  rvm use 1.9.2
2
- rvm wrapper 1.9.2
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fixer (0.2.0)
4
+ fixer (0.3.0)
5
5
  nokogiri (~> 1.4.0)
6
6
 
7
7
  GEM
@@ -9,17 +9,14 @@ GEM
9
9
  specs:
10
10
  diff-lcs (1.1.2)
11
11
  nokogiri (1.4.3.1)
12
- rake (0.8.7)
13
- rspec (2.0.0.rc)
14
- rspec-core (= 2.0.0.rc)
15
- rspec-expectations (= 2.0.0.rc)
16
- rspec-mocks (= 2.0.0.rc)
17
- rspec-core (2.0.0.rc)
18
- rspec-expectations (2.0.0.rc)
19
- diff-lcs (>= 1.1.2)
20
- rspec-mocks (2.0.0.rc)
21
- rspec-core (= 2.0.0.rc)
22
- rspec-expectations (= 2.0.0.rc)
12
+ rspec (2.1.0)
13
+ rspec-core (~> 2.1.0)
14
+ rspec-expectations (~> 2.1.0)
15
+ rspec-mocks (~> 2.1.0)
16
+ rspec-core (2.1.0)
17
+ rspec-expectations (2.1.0)
18
+ diff-lcs (~> 1.1.2)
19
+ rspec-mocks (2.1.0)
23
20
 
24
21
  PLATFORMS
25
22
  ruby
@@ -27,5 +24,4 @@ PLATFORMS
27
24
  DEPENDENCIES
28
25
  fixer!
29
26
  nokogiri (~> 1.4.0)
30
- rake
31
- rspec (= 2.0.0.rc)
27
+ rspec (~> 2.1.0)
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 [name of plugin creator]
1
+ Copyright (c) 2009 Paper Cavalier
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -0,0 +1,11 @@
1
+ Fixer
2
+ ====
3
+
4
+ Fixer wraps the current and historical [foreign exchange rate feeds](http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html) of the European Central Bank.
5
+
6
+ Usage
7
+ -----
8
+
9
+ Fixer.daily
10
+ Fixer.historical_90
11
+ Fixer.historical
data/Rakefile CHANGED
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  require "bundler"
3
2
  require "rspec/core/rake_task"
4
3
 
@@ -10,14 +10,12 @@ Gem::Specification.new do |s|
10
10
  s.email = ["code@papercavalier.com"]
11
11
  s.homepage = "http://fixer.heroku.com"
12
12
  s.summary = "A Ruby wrapper to the European Central Bank exchange rate feeds"
13
- s.description = "Fixer is a Ruby wrapper to the current and historical foreign exchange or FX rate feeds provided by the European Central Bank."
13
+ s.description = "Fixer is a Ruby wrapper to the current and historical foreign exchange or FX rate feeds of the European Central Bank."
14
14
 
15
15
  s.rubyforge_project = "fixer"
16
16
 
17
17
  s.add_dependency("nokogiri", ["~> 1.4.0"])
18
-
19
- s.add_development_dependency("rake")
20
- s.add_development_dependency("rspec", ["= 2.0.0.rc"])
18
+ s.add_development_dependency("rspec", ["~> 2.1.0"])
21
19
 
22
20
  s.files = `git ls-files`.split("\n")
23
21
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -1,7 +1,5 @@
1
- # encoding: utf-8
2
1
  require 'open-uri'
3
2
  require 'nokogiri'
4
- require File.dirname(__FILE__) + '/fixer/cache'
5
3
 
6
4
  module Fixer
7
5
  class << self
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  module Fixer
3
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
4
3
  end
@@ -1,9 +1,9 @@
1
- # encoding: utf-8
2
1
  require 'spec_helper'
3
2
 
4
3
  describe Fixer do
5
4
  it "downloads daily rates" do
6
5
  rates = Fixer.daily
6
+
7
7
  rates.size.should eql 1
8
8
  rates.first.should have_key :date
9
9
  rates.first.should have_key :rates
@@ -11,6 +11,7 @@ describe Fixer do
11
11
 
12
12
  it "downloads 90-day historical" do
13
13
  rates = Fixer.historical_90
14
+
14
15
  # We should have more than 50 working days in a three-month period
15
16
  rates.size.should > 50
16
17
  rates.each do |rate|
@@ -21,6 +22,7 @@ describe Fixer do
21
22
 
22
23
  it "downloads historical" do
23
24
  rates = Fixer.historical
25
+
24
26
  # We should have a lot of working days in history
25
27
  rates.size.should > 1000
26
28
  rates.each do |rate|
@@ -1,6 +1,4 @@
1
- # encoding: utf-8
2
- require "rubygems"
3
- require "bundler/setup"
1
+ require "bundler"
4
2
  require "rspec"
5
3
 
6
4
  require File.expand_path("../../lib/fixer", __FILE__)
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 2
8
- - 1
9
- version: 0.2.1
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Hakan Ensari
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-10-07 00:00:00 +01:00
17
+ date: 2010-12-03 00:00:00 +00:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -32,36 +32,22 @@ dependencies:
32
32
  version: 1.4.0
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: rake
37
- prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 0
45
- version: "0"
46
- type: :development
47
- version_requirements: *id002
48
35
  - !ruby/object:Gem::Dependency
49
36
  name: rspec
50
37
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
38
+ requirement: &id002 !ruby/object:Gem::Requirement
52
39
  none: false
53
40
  requirements:
54
- - - "="
41
+ - - ~>
55
42
  - !ruby/object:Gem::Version
56
43
  segments:
57
44
  - 2
45
+ - 1
58
46
  - 0
59
- - 0
60
- - rc
61
- version: 2.0.0.rc
47
+ version: 2.1.0
62
48
  type: :development
63
- version_requirements: *id003
64
- description: Fixer is a Ruby wrapper to the current and historical foreign exchange or FX rate feeds provided by the European Central Bank.
49
+ version_requirements: *id002
50
+ description: Fixer is a Ruby wrapper to the current and historical foreign exchange or FX rate feeds of the European Central Bank.
65
51
  email:
66
52
  - code@papercavalier.com
67
53
  executables: []
@@ -77,13 +63,11 @@ files:
77
63
  - Gemfile
78
64
  - Gemfile.lock
79
65
  - LICENSE
80
- - README.markdown
66
+ - README.md
81
67
  - Rakefile
82
68
  - fixer.gemspec
83
69
  - lib/fixer.rb
84
- - lib/fixer/cache.rb
85
70
  - lib/fixer/version.rb
86
- - spec/fixer/cache_spec.rb
87
71
  - spec/fixer_spec.rb
88
72
  - spec/spec_helper.rb
89
73
  has_rdoc: true
@@ -119,6 +103,5 @@ signing_key:
119
103
  specification_version: 3
120
104
  summary: A Ruby wrapper to the European Central Bank exchange rate feeds
121
105
  test_files:
122
- - spec/fixer/cache_spec.rb
123
106
  - spec/fixer_spec.rb
124
107
  - spec/spec_helper.rb
@@ -1,30 +0,0 @@
1
- Fixer
2
- ====
3
-
4
- Fixer is a Ruby wrapper to the [current and historical foreign exchange rate feeds provided by the European Central Bank](http://www.ecb.europa.eu/stats/exchange/eurofxref/html/index.en.html).
5
-
6
- I am also throwing in a *minimal* cache. Use if it suits you or implement your own.
7
-
8
- Bonus: Use the Money gem.
9
-
10
- Usage
11
- -----
12
-
13
- # Download the daily rates.
14
- Fixer.daily
15
-
16
- # Download the 90-day historical rates.
17
- Fixer.historical_90
18
-
19
- # Download all historical rates.
20
- Fixer.historical
21
-
22
- # Use the built-in cache.
23
- cache = Fixer::Cache
24
- cache.to_usd
25
- => 1.397
26
- cache.base = "EUR"
27
- cache.to_eur
28
- => 0.7158
29
-
30
- # It doesn't get any simpler than this.
@@ -1,52 +0,0 @@
1
- # encoding: utf-8
2
- module Fixer
3
- class Cache
4
- class << self
5
- def base
6
- @base || "EUR"
7
- end
8
-
9
- def base=(name)
10
- @base = name
11
- end
12
-
13
- def expire
14
- @rates = nil
15
- end
16
-
17
- def method_missing(sym, *args, &block)
18
- if sym.to_s =~ /^to_(.*)$/
19
- counter = $1.upcase
20
- var_name = "@#{base}_#{counter}".to_sym
21
- rate = instance_variable_get(var_name)
22
- return rate unless rate.nil?
23
-
24
- rate = quote(counter) / quote(base)
25
- rate = (rate * 10000).round.to_f / 10000
26
- instance_variable_set(var_name, rate)
27
- rate
28
- else
29
- super
30
- end
31
- end
32
-
33
- private
34
-
35
- def rates
36
- begin
37
- @rates ||= Fixer.daily.first[:rates].push({ :currency => "EUR", :rate => "1.0" })
38
- rescue
39
- raise Error, "Cache not valid"
40
- end
41
- end
42
-
43
- def quote(counter)
44
- rate = rates.detect { |rate| rate[:currency] == counter }
45
- raise(Error, "#{counter} not a valid currency") if rate.nil?
46
- rate[:rate].to_f
47
- end
48
- end
49
- end
50
-
51
- class Error < StandardError; end
52
- end
@@ -1,80 +0,0 @@
1
- # encoding: utf-8
2
- require 'spec_helper'
3
-
4
- module Fixer
5
- describe Cache do
6
- let(:mock_rates) do
7
- [
8
- { :currency=>"USD", :rate=>"1.3856" },
9
- { :currency=>"JPY", :rate=>"114.98" },
10
- { :currency=>"GBP", :rate=>"0.87260" },
11
- { :currency=>"CAD", :rate=>"1.4018" },
12
- { :currency=>"EUR", :rate=>"1.0" }
13
- ]
14
- end
15
-
16
- let(:cache) do
17
- cache = Fixer::Cache
18
- cache.base = "EUR"
19
- cache.expire
20
- cache
21
- end
22
-
23
- it "sets base currency" do
24
- cache.base = "USD"
25
- cache.base.should eql "USD"
26
- end
27
-
28
- it "quotes" do
29
- cache.instance_variable_set(:@rates, mock_rates)
30
- cache.send(:quote, "USD").should eql 1.3856
31
- end
32
-
33
- it "caches" do
34
- cache.instance_variable_set(:@rates, "foo")
35
- cache.send(:rates).should eql "foo"
36
- end
37
-
38
- it "seeds cache" do
39
- cache.send(:rates).detect { |rate| rate[:currency] == "USD" }[:rate].should_not be_nil
40
- end
41
-
42
- it "expires cache" do
43
- cache.instance_variable_set(:@rates, "foo")
44
- cache.expire
45
- cache.instance_variable_get(:@rates).should be_nil
46
- end
47
-
48
- it "raises an error if cache not valid" do
49
- Fixer.stub!(:daily).and_return("foo")
50
- lambda { cache.send(:rates) }.should raise_error Fixer::Error, "Cache not valid"
51
- end
52
-
53
- it "returns an exchange rate" do
54
- cache.instance_variable_set(:@rates, mock_rates)
55
- cache.to_eur.should eql 1.0
56
- cache.to_usd.should eql 1.3856
57
-
58
- cache.base = "GBP"
59
- cache.to_gbp.should eql 1.0
60
- cache.to_usd.should eql 1.5879
61
- end
62
-
63
- it "caches requested exchange rates" do
64
- cache.instance_variable_set(:@rates, mock_rates)
65
- cache.to_usd
66
- cache.instance_variable_get(:@EUR_USD).should eql 1.3856
67
- end
68
-
69
- it "raises an error if counter currency not valid" do
70
- cache.instance_variable_set(:@rates, mock_rates)
71
- lambda { cache.to_foo }.should raise_error Fixer::Error, "FOO not a valid currency"
72
- end
73
-
74
- it "raises an error if base currency not valid" do
75
- cache.instance_variable_set(:@rates, mock_rates)
76
- cache.base = "BAR"
77
- lambda { cache.to_usd }.should raise_error Fixer::Error, "BAR not a valid currency"
78
- end
79
- end
80
- end