simple_currency 1.0.0 → 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/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm --create use ruby-1.8.7@simple_currency > /dev/null
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.0.1
@@ -35,8 +35,10 @@ module CurrencyConvertible
35
35
 
36
36
  # If not, perform a call to the api
37
37
  json_response = call_api(original, target, amount)
38
- return nil unless json_response
39
- result = sprintf("%.2f", JSON.parse(json_response)["result"]["value"]).to_f
38
+ return nil unless json_response && parsed_response = JSON.parse(json_response)
39
+ raise parsed_response["message"] if parsed_response["status"] != "ok"
40
+
41
+ result = sprintf("%.2f", parsed_response["result"]["value"]).to_f
40
42
 
41
43
  # Cache exchange rate for today only
42
44
  Rails.cache.write("#{original}_#{target}_#{Time.now.to_a[3..5].join('-')}", calculate_rate(amount,result)) if defined?(Rails)
@@ -55,7 +57,7 @@ module CurrencyConvertible
55
57
  end
56
58
 
57
59
  def check_cache(original, target, amount)
58
- if rate = ::Rails.cache.read("#{original}_#{target}_#{Time.now.to_a[3..5].join('-')}")
60
+ if rate = Rails.cache.read("#{original}_#{target}_#{Time.now.to_a[3..5].join('-')}")
59
61
  result = (amount * rate).to_f
60
62
  return result = (result * 100).round.to_f / 100
61
63
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{simple_currency}
8
- s.version = "1.0.0"
8
+ s.version = "1.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Oriol Gual", "Josep M. Bach", "Josep Jaume Rey"]
12
- s.date = %q{2010-08-30}
12
+ s.date = %q{2010-08-31}
13
13
  s.description = %q{A really simple currency converter using the Xurrency API. It's Ruby 1.8, 1.9 and JRuby compatible, and it also takes advantage of Rails cache when available.}
14
14
  s.email = %q{info@codegram.com}
15
15
  s.extra_rdoc_files = [
@@ -19,9 +19,9 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".autotest",
21
21
  ".bundle/config",
22
- ".document",
23
22
  ".gitignore",
24
23
  ".rspec",
24
+ ".rvmrc",
25
25
  "Gemfile",
26
26
  "Gemfile.lock",
27
27
  "LICENSE",
@@ -2,9 +2,13 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "SimpleCurrency" do
4
4
 
5
- def mock_uri(from_currency, to_currency, amount, result)
5
+ def mock_uri(from_currency, to_currency, amount, result, options = {})
6
6
  args = [from_currency, to_currency, amount]
7
+
7
8
  response = "{\"result\":{\"value\":#{result},\"target\":\"#{to_currency}\",\"base\":\"#{from_currency}\"},\"status\":\"ok\"}"
9
+
10
+ response = "{\"message\":\"#{options[:fail_with]}\", \"status\":\"fail\"\}" if options[:fail_with]
11
+
8
12
  FakeWeb.register_uri(:get, "http://xurrency.com/api/#{args.join('/')}", :body => response)
9
13
  end
10
14
 
@@ -29,6 +33,14 @@ describe "SimpleCurrency" do
29
33
  8.should respond_to(:to_eur)
30
34
  end
31
35
 
36
+ it "raises any error returned by the api call" do
37
+ mock_uri('usd', 'xxx', 1, 1.5, :fail_with => "The currencies are not valid")
38
+ mock_uri('usd', 'eur', 1_000_000_000, 1.5, :fail_with => "The amount should be between 0 and 999999999")
39
+
40
+ expect {1.usd.to_xxx}.to raise_error("The currencies are not valid")
41
+ expect {1_000_000_000.usd.to_eur}.to raise_error("The amount should be between 0 and 999999999")
42
+ end
43
+
32
44
  context "when Rails is present" do
33
45
 
34
46
  before(:all) do
@@ -50,13 +62,15 @@ describe "SimpleCurrency" do
50
62
  it "ensures the cache is valid only for today" do
51
63
  now = Time.parse('2010-08-30')
52
64
 
65
+ Time.stub(:now).and_return(now)
66
+
53
67
  Rails.stub_chain("cache.write").and_return(true)
54
68
  Rails.stub_chain("cache.read").with('usd_eur_30-8-2010').and_return(1.5)
55
69
 
56
70
  mock_uri('usd', 'eur', 1, 1.5)
57
71
  1.usd.to_eur.should == 1.5
58
72
 
59
- Time.stub(:now).and_return(now + 86400) # Tomorrow
73
+ Time.stub(:now).and_return(now + 86400) # One day later
60
74
  Rails.stub_chain("cache.read").with('usd_eur_31-8-2010').and_return(nil)
61
75
 
62
76
  # Exchange rate has changed next day, so forget cache rate!
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
- - 0
9
- version: 1.0.0
8
+ - 1
9
+ version: 1.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Oriol Gual
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-08-30 00:00:00 +02:00
19
+ date: 2010-08-31 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -117,9 +117,9 @@ extra_rdoc_files:
117
117
  files:
118
118
  - .autotest
119
119
  - .bundle/config
120
- - .document
121
120
  - .gitignore
122
121
  - .rspec
122
+ - .rvmrc
123
123
  - Gemfile
124
124
  - Gemfile.lock
125
125
  - LICENSE
data/.document DELETED
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE