google_currency 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/AUTHORS CHANGED
@@ -1,7 +1,9 @@
1
1
  andersonbrandon
2
2
  Donald Ball
3
+ Daniel Doubrovkine
3
4
  James Chen
4
5
  Jérémy Lecour
5
6
  Lars Pind
6
7
  Shane Emmons
7
8
  sowenjub
9
+ yinquanteo
@@ -1,3 +1,8 @@
1
+ master
2
+ ======
3
+
4
+ - fix incorrect parsing of complex rates
5
+
1
6
  Google Currency 2.2.0
2
7
  =====================
3
8
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "google_currency"
3
- s.version = "2.2.0"
3
+ s.version = "2.3.0"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.authors = ["Shane Emmons"]
6
6
  s.email = ["semmons99@gmail.com"]
@@ -13,11 +13,10 @@ Gem::Specification.new do |s|
13
13
  s.add_development_dependency "rspec", ">= 2.0.0"
14
14
  s.add_development_dependency "yard", ">= 0.5.8"
15
15
  s.add_development_dependency "json", ">= 1.4.0"
16
- s.add_development_dependency "yajl-ruby", ">= 1.0.0"
17
16
  s.add_development_dependency "ffi"
18
17
 
19
- s.add_dependency "money", "~> 5.1.0"
20
- s.add_dependency "multi_json", ">= 1.0.0"
18
+ s.add_dependency "money", "~> 5.1.1"
19
+ s.add_dependency "multi_json"
21
20
 
22
21
  s.files = Dir.glob("{lib,spec}/**/*")
23
22
  s.files += %w(LICENSE README.md CHANGELOG.md AUTHORS)
@@ -8,6 +8,7 @@ class Money
8
8
 
9
9
  SERVICE_HOST = "www.google.com"
10
10
  SERVICE_PATH = "/ig/calculator"
11
+ EXPONENT_REGEXP = /10(x3c)?sup(x3e)?(?<exponent>-?\d+)(x3c)?\/sup(x3e)?/
11
12
 
12
13
  # @return [Hash] Stores the currently known rates.
13
14
  attr_reader :rates
@@ -107,6 +108,8 @@ class Money
107
108
  #
108
109
  # @return [Hash]
109
110
  def fix_response_json_data(data)
111
+ data = data.force_encoding("ISO-8859-1").encode("UTF-8")
112
+
110
113
  data.gsub!(/lhs:/, '"lhs":')
111
114
  data.gsub!(/rhs:/, '"rhs":')
112
115
  data.gsub!(/error:/, '"error":')
@@ -137,7 +140,7 @@ class Money
137
140
  #
138
141
  # @return [Boolean]
139
142
  def complex_rate?(rhs)
140
- rhs.match(/10x3csupx3e(-?\d+)x3c\/supx3e/)
143
+ rhs.match(EXPONENT_REGEXP)
141
144
  end
142
145
 
143
146
  ##
@@ -149,9 +152,9 @@ class Money
149
152
  # @return [BigDecimal]
150
153
  def decode_complex_rate(rhs)
151
154
  rate = BigDecimal(rhs.match(/\d[\d\s]*\.?\d*/)[0])
152
- power = rhs.match(/10x3csupx3e(-?\d+)x3c\/supx3e/)
155
+ power = rhs.match(EXPONENT_REGEXP)
153
156
 
154
- rate * 10**power[1].to_i
157
+ rate * BigDecimal("1E#{power[:exponent]}")
155
158
  end
156
159
 
157
160
  ##
@@ -32,12 +32,22 @@ describe "GoogleCurrency" do
32
32
  @bank.rates.should include('USD_TO_EUR')
33
33
  end
34
34
 
35
- it "should handle complex rates" do
36
- uri = double('uri')
37
- @bank.stub(:build_uri){|from,to| uri }
38
- uri.stub(:read) { %q({lhs: "1 Vietnamese dong",rhs: "4.8 \x26#215; 10\x3csup\x3e-5\x3c/sup\x3e U.S. dollars",error: "",icc: true}) }
35
+ context "handles" do
36
+ before :each do
37
+ @uri = double('uri')
38
+ @bank.stub(:build_uri){ |from,to| @uri }
39
+ end
39
40
 
40
- @bank.get_rate('VND', 'USD').should == BigDecimal("0.48215105E1")
41
+ it "Vietnamese Dong" do
42
+ # rhs decodes (after html entity decoding) to "4.8 x 10<sup>-5</sup> U.S. dollars"
43
+ @uri.stub(:read) { %q({lhs: "1 Vietnamese dong",rhs: "4.8 \x26#215; 10\x3csup\x3e-5\x3c/sup\x3e U.S. dollars",error: "",icc: true}) }
44
+ @bank.get_rate('VND', 'USD').should == BigDecimal("4.8E-5")
45
+ end
46
+
47
+ it "Indonesian Rupiah" do
48
+ @uri.stub(:read) { "{lhs: \"1 U.S. dollar\",rhs: \"10\xA0000 Indonesian rupiahs\",error: \"\",icc: true}" }
49
+ @bank.get_rate('IDR', 'USD').should == BigDecimal("0.1E5")
50
+ end
41
51
  end
42
52
  end
43
53
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_currency
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-25 00:00:00.000000000 Z
12
+ date: 2013-10-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -59,22 +59,6 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.4.0
62
- - !ruby/object:Gem::Dependency
63
- name: yajl-ruby
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
68
- - !ruby/object:Gem::Version
69
- version: 1.0.0
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: 1.0.0
78
62
  - !ruby/object:Gem::Dependency
79
63
  name: ffi
80
64
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +82,7 @@ dependencies:
98
82
  requirements:
99
83
  - - ~>
100
84
  - !ruby/object:Gem::Version
101
- version: 5.1.0
85
+ version: 5.1.1
102
86
  type: :runtime
103
87
  prerelease: false
104
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +90,7 @@ dependencies:
106
90
  requirements:
107
91
  - - ~>
108
92
  - !ruby/object:Gem::Version
109
- version: 5.1.0
93
+ version: 5.1.1
110
94
  - !ruby/object:Gem::Dependency
111
95
  name: multi_json
112
96
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +98,7 @@ dependencies:
114
98
  requirements:
115
99
  - - ! '>='
116
100
  - !ruby/object:Gem::Version
117
- version: 1.0.0
101
+ version: '0'
118
102
  type: :runtime
119
103
  prerelease: false
120
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +106,7 @@ dependencies:
122
106
  requirements:
123
107
  - - ! '>='
124
108
  - !ruby/object:Gem::Version
125
- version: 1.0.0
109
+ version: '0'
126
110
  description: GoogleCurrency extends Money::Bank::Base and gives you access to the
127
111
  current Google Currency exchange rates.
128
112
  email:
@@ -133,7 +117,6 @@ extra_rdoc_files: []
133
117
  files:
134
118
  - lib/money/bank/google_currency.rb
135
119
  - spec/google_currency_with_json_spec.rb
136
- - spec/google_currency_with_yajl_spec.rb
137
120
  - spec/spec_helper.rb
138
121
  - LICENSE
139
122
  - README.md
@@ -1,60 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- require 'money'
4
- require 'money/bank/google_currency'
5
-
6
- require 'yajl'
7
- MultiJson.engine = :yajl
8
-
9
- describe "GoogleCurrency" do
10
- before :each do
11
- @bank = Money::Bank::GoogleCurrency.new
12
- end
13
-
14
- describe "#get_rate" do
15
- it "should use #fetch_rate when rate is unknown" do
16
- @bank.should_receive(:fetch_rate).once
17
- @bank.get_rate('USD', 'USD')
18
- end
19
-
20
- it "should not use #fetch_rate when rate is known" do
21
- @bank.get_rate('USD', 'USD')
22
- @bank.should_not_receive(:fetch_rate)
23
- @bank.get_rate('USD', 'USD')
24
- end
25
-
26
- it "should return the correct rate" do
27
- @bank.get_rate('USD', 'USD').should == 1.0
28
- end
29
-
30
- it "should store the rate for faster retreival" do
31
- @bank.get_rate('USD', 'EUR')
32
- @bank.rates.should include('USD_TO_EUR')
33
- end
34
-
35
- it "should handle complex rates" do
36
- uri = double('uri')
37
- @bank.stub(:build_uri){|from,to| uri }
38
- uri.stub(:read) { %q({lhs: "1 Vietnamese dong",rhs: "4.8 \x26#215; 10\x3csup\x3e-5\x3c/sup\x3e U.S. dollars",error: "",icc: true}) }
39
- @bank.get_rate('VND', 'USD').should == BigDecimal("0.48215105E1")
40
- end
41
- end
42
-
43
- describe "#flush_rates" do
44
- it "should empty @rates" do
45
- @bank.get_rate('USD', 'EUR')
46
- @bank.flush_rates
47
- @bank.rates.should == {}
48
- end
49
- end
50
-
51
- describe "#flush_rate" do
52
- it "should remove a specific rate from @rates" do
53
- @bank.get_rate('USD', 'EUR')
54
- @bank.get_rate('USD', 'JPY')
55
- @bank.flush_rate('USD', 'EUR')
56
- @bank.rates.should include('USD_TO_JPY')
57
- @bank.rates.should_not include('USD_TO_EUR')
58
- end
59
- end
60
- end