google_currency_rails_cache 1.1.1 → 1.2

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.
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: