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 +1 -0
- data/VERSION +1 -1
- data/lib/simple_currency/currency_convertible.rb +5 -3
- data/simple_currency.gemspec +3 -3
- data/spec/simple_currency_spec.rb +16 -2
- metadata +4 -4
- data/.document +0 -5
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.
|
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
|
-
|
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 =
|
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
|
data/simple_currency.gemspec
CHANGED
@@ -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.
|
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-
|
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) #
|
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
|
-
-
|
9
|
-
version: 1.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-
|
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
|