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 +15 -0
- data/google_currency_rails_cache.gemspec +1 -1
- data/lib/money/bank/google_currency_rails_cache.rb +10 -69
- metadata +5 -24
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=
|
@@ -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 = "/
|
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
|
-
|
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 => "
|
102
|
+
:query => "a=1&from=#{from.iso_code}&to=#{to.iso_code}"
|
108
103
|
)
|
109
104
|
end
|
110
105
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
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
|
-
|
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.
|
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-
|
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.
|
166
|
+
rubygems_version: 2.1.10
|
185
167
|
signing_key:
|
186
|
-
specification_version:
|
168
|
+
specification_version: 4
|
187
169
|
summary: Access the Google Currency exchange rate data.
|
188
170
|
test_files: []
|
189
|
-
has_rdoc:
|