google_currency_rails_cache 1.1.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NjQ0MTJiZDQxNTg3NjFkYzdhNzhhZDliYTI1MWVmMDIxYmU0NjhlYQ==
5
+ data.tar.gz: !binary |-
6
+ ODZjZDJlMDIyMDI5OWM3ZTQyZDhmOTcxYTI5OTI1MTkwNGYzMmU2MA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NmViOTVmYzZhMmFlZmRiNWM0YjI0MzQyZTg3ZmI0ZjM4ZjI0YTY3NjNiNmIz
10
+ ZDc0ZGEyZmFmZGJiNGNiM2FhYjgyN2E1YTM1YjZiYzBjMGQ5MzYzMzkwZGQw
11
+ MDg1M2ZjMWVhOGRkM2JiYWI3MDM4NDhhNmRlZWZiYzMwOGQwYWE=
12
+ data.tar.gz: !binary |-
13
+ MDRlMzA4ODExYjc0M2ZjNTcyMDAxZmY1NDY4MTQwZDA1ODI3YmNmMzAxNWM5
14
+ Y2YwYjVhZGNiMjI0YjBlZmY1YzQ4NDk4YWI1YjFmNzQ1YzM4ODg4ZjdiYjc5
15
+ M2VkYTA2ZTIzZmU5N2FiNmYyMzBiN2U5YWQzMTQ1N2QzMzA2MGM=
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "google_currency_rails_cache"
3
- s.version = "1.1.1"
3
+ s.version = "1.2"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.authors = ["Shane Emmons", "Alex Kremer"]
6
6
  s.email = ["semmons99@gmail.com", "alex@flextrip.com"]
@@ -7,7 +7,7 @@ class Money
7
7
  class GoogleCurrencyRailsCache < Money::Bank::VariableExchange
8
8
 
9
9
  SERVICE_HOST = "www.google.com"
10
- SERVICE_PATH = "/ig/calculator"
10
+ SERVICE_PATH = "/finance/converter"
11
11
 
12
12
  ##
13
13
  # Clears all rates stored in @rates
@@ -85,12 +85,7 @@ class Money
85
85
  from, to = Currency.wrap(from), Currency.wrap(to)
86
86
 
87
87
  data = build_uri(from, to).read
88
- data = fix_response_json_data(data)
89
-
90
- error = data['error']
91
- raise UnknownRate unless error == '' || error == '0'
92
- add_to_stored_rates(rate_key_for(from, to))
93
- decode_rate data['rhs']
88
+ extract_rate(data)
94
89
  end
95
90
 
96
91
  ##
@@ -104,74 +99,20 @@ class Money
104
99
  uri = URI::HTTP.build(
105
100
  :host => SERVICE_HOST,
106
101
  :path => SERVICE_PATH,
107
- :query => "hl=en&q=1#{from.iso_code}%3D%3F#{to.iso_code}"
102
+ :query => "a=1&from=#{from.iso_code}&to=#{to.iso_code}"
108
103
  )
109
104
  end
110
105
 
111
- ##
112
- # Takes the invalid JSON returned by Google and fixes it.
113
- #
114
- # @param [String] data The JSON string to fix.
115
- #
116
- # @return [Hash]
117
- def fix_response_json_data(data)
118
- data.gsub!(/lhs:/, '"lhs":')
119
- data.gsub!(/rhs:/, '"rhs":')
120
- data.gsub!(/error:/, '"error":')
121
- data.gsub!(/icc:/, '"icc":')
122
- data.gsub!(Regexp.new("(\\\\x..|\\\\240)"), '')
123
-
124
- MultiJson.decode(data)
125
- end
126
-
127
- ##
128
- # Takes the 'rhs' response from Google and decodes it.
129
- #
130
- # @param [String] rhs The google rate string to decode.
131
- #
132
- # @return [BigDecimal]
133
- def decode_rate(rhs)
134
- if complex_rate?(rhs)
135
- decode_complex_rate(rhs)
106
+ def extract_rate(data)
107
+ case data
108
+ when /<span class=bld>(\d+\.?\d*) [A-Z]{3}<\/span>/
109
+ BigDecimal($1)
110
+ when /Could not convert\./
111
+ raise UnknownRate
136
112
  else
137
- decode_basic_rate(rhs)
113
+ raise GoogleCurrencyFetchError
138
114
  end
139
115
  end
140
-
141
- ##
142
- # Takes the 'rhs' response from Google and decides if it's a complex rate
143
- #
144
- # @param [String] rhs The google rate string to check.
145
- #
146
- # @return [Boolean]
147
- def complex_rate?(rhs)
148
- rhs.match(/10x3csupx3e(-?\d+)x3c\/supx3e/)
149
- end
150
-
151
- ##
152
- # Takes a complex 'rhs' response from Google and converts it to a numeric
153
- # rate.
154
- #
155
- # @param [String] rhs The complex google rate string to convert.
156
- #
157
- # @return [BigDecimal]
158
- def decode_complex_rate(rhs)
159
- rate = BigDecimal(rhs.match(/\d[\d\s]*\.?\d*/)[0])
160
- power = rhs.match(/10x3csupx3e(-?\d+)x3c\/supx3e/)
161
-
162
- rate * 10**power[1].to_i
163
- end
164
-
165
- ##
166
- # Takes a basic 'rhs' response from Google and converts it to a numeric
167
- # rate.
168
- #
169
- # @param [String] rhs The basic google rate string to convert.
170
- #
171
- # @return [BigDecimal]
172
- def decode_basic_rate(rhs)
173
- BigDecimal(rhs.gsub(/[^\d\.]/, ''))
174
- end
175
116
 
176
117
  ##
177
118
  # Removes the specified rate from the global list of stored rates
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_currency_rails_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
5
- prerelease:
4
+ version: '1.2'
6
5
  platform: ruby
7
6
  authors:
8
7
  - Shane Emmons
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-06-30 00:00:00.000000000 Z
12
+ date: 2013-11-16 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ! '>='
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ! '>='
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: yard
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ! '>='
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ! '>='
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: json
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ! '>='
53
47
  - !ruby/object:Gem::Version
@@ -55,7 +49,6 @@ dependencies:
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ! '>='
61
54
  - !ruby/object:Gem::Version
@@ -63,7 +56,6 @@ dependencies:
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: yajl-ruby
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
60
  - - ! '>='
69
61
  - !ruby/object:Gem::Version
@@ -71,7 +63,6 @@ dependencies:
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
67
  - - ! '>='
77
68
  - !ruby/object:Gem::Version
@@ -79,7 +70,6 @@ dependencies:
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: ffi
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
74
  - - ! '>='
85
75
  - !ruby/object:Gem::Version
@@ -87,7 +77,6 @@ dependencies:
87
77
  type: :development
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
81
  - - ! '>='
93
82
  - !ruby/object:Gem::Version
@@ -95,7 +84,6 @@ dependencies:
95
84
  - !ruby/object:Gem::Dependency
96
85
  name: money
97
86
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
87
  requirements:
100
88
  - - ~>
101
89
  - !ruby/object:Gem::Version
@@ -103,7 +91,6 @@ dependencies:
103
91
  type: :runtime
104
92
  prerelease: false
105
93
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
94
  requirements:
108
95
  - - ~>
109
96
  - !ruby/object:Gem::Version
@@ -111,7 +98,6 @@ dependencies:
111
98
  - !ruby/object:Gem::Dependency
112
99
  name: multi_json
113
100
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
101
  requirements:
116
102
  - - ! '>='
117
103
  - !ruby/object:Gem::Version
@@ -119,7 +105,6 @@ dependencies:
119
105
  type: :runtime
120
106
  prerelease: false
121
107
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
108
  requirements:
124
109
  - - ! '>='
125
110
  - !ruby/object:Gem::Version
@@ -127,7 +112,6 @@ dependencies:
127
112
  - !ruby/object:Gem::Dependency
128
113
  name: rails
129
114
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
115
  requirements:
132
116
  - - ! '>='
133
117
  - !ruby/object:Gem::Version
@@ -135,7 +119,6 @@ dependencies:
135
119
  type: :runtime
136
120
  prerelease: false
137
121
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
122
  requirements:
140
123
  - - ! '>='
141
124
  - !ruby/object:Gem::Version
@@ -163,27 +146,25 @@ files:
163
146
  - google_currency_rails_cache.gemspec
164
147
  homepage: http://github.com/flextrip/google_currency_rails_cache
165
148
  licenses: []
149
+ metadata: {}
166
150
  post_install_message:
167
151
  rdoc_options: []
168
152
  require_paths:
169
153
  - lib
170
154
  required_ruby_version: !ruby/object:Gem::Requirement
171
- none: false
172
155
  requirements:
173
156
  - - ! '>='
174
157
  - !ruby/object:Gem::Version
175
158
  version: '0'
176
159
  required_rubygems_version: !ruby/object:Gem::Requirement
177
- none: false
178
160
  requirements:
179
161
  - - ! '>='
180
162
  - !ruby/object:Gem::Version
181
163
  version: 1.3.6
182
164
  requirements: []
183
165
  rubyforge_project:
184
- rubygems_version: 1.8.25
166
+ rubygems_version: 2.1.10
185
167
  signing_key:
186
- specification_version: 3
168
+ specification_version: 4
187
169
  summary: Access the Google Currency exchange rate data.
188
170
  test_files: []
189
- has_rdoc: