google_maps_service 0.4.0 → 0.4.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.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/CHANGELOG.md +5 -0
- data/Gemfile +20 -0
- data/Rakefile +8 -5
- data/google_maps_service.gemspec +1 -9
- data/lib/google_maps_service.rb +2 -0
- data/lib/google_maps_service/apis/roads.rb +1 -1
- data/lib/google_maps_service/client.rb +40 -31
- data/lib/google_maps_service/errors.rb +3 -0
- data/lib/google_maps_service/version.rb +1 -1
- metadata +2 -126
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49c25953305b497d054ac7ae74894e1dbb904d1f
|
4
|
+
data.tar.gz: 749c75ddf3ca5b13fac1c5eb24cc403661edfc04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 38e4aa2429aecaeca3852c527cb256f10160a46984b449752846a8f1f3da3ef6fae1ec5eb2f4b0c816506ae00d7ed270570b7b6986e82d25447e21c3b88e87ec
|
7
|
+
data.tar.gz: 3f667efd574b1e5a200dfdc0f2a58b5976e46ae808d75cd34bc3daf5686ce9220f639ca464888255ef4f265ec53502019745b18148ecf26352252f3d722b939e
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -2,3 +2,23 @@ source 'https://rubygems.org'
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in google_maps_service.gemspec
|
4
4
|
gemspec
|
5
|
+
|
6
|
+
group :development do
|
7
|
+
gem 'bundler', '~> 1.6'
|
8
|
+
gem 'rake', '~> 10.0'
|
9
|
+
gem 'rspec', '~> 3.3'
|
10
|
+
gem 'simplecov', '~> 0.10'
|
11
|
+
gem 'coveralls', '~> 0.8.2'
|
12
|
+
gem 'webmock', '~> 1.21'
|
13
|
+
end
|
14
|
+
|
15
|
+
platforms :ruby do
|
16
|
+
group :development do
|
17
|
+
gem 'yard', '~> 0.8'
|
18
|
+
gem 'redcarpet', '~> 3.2'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
if ENV['RAILS_VERSION']
|
23
|
+
gem 'rails', ENV['RAILS_VERSION']
|
24
|
+
end
|
data/Rakefile
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require "yard"
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rspec/core/rake_task'
|
4
3
|
|
5
4
|
RSpec::Core::RakeTask.new
|
6
5
|
|
7
6
|
task :default => :spec
|
8
7
|
task :test => :spec
|
9
8
|
|
10
|
-
|
11
|
-
|
9
|
+
unless defined?(JRUBY_VERSION)
|
10
|
+
require 'yard'
|
11
|
+
|
12
|
+
YARD::Rake::YardocTask.new do |t|
|
13
|
+
t.files = ['lib/**/*.rb']
|
14
|
+
end
|
12
15
|
end
|
data/google_maps_service.gemspec
CHANGED
@@ -20,13 +20,5 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'multi_json', '~> 1.11'
|
22
22
|
spec.add_runtime_dependency 'hurley', '~> 0.1'
|
23
|
-
spec.add_runtime_dependency 'retriable', '~> 2.0'
|
24
|
-
spec.add_development_dependency 'bundler', '~> 1.7'
|
25
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
-
spec.add_development_dependency 'yard', '~> 0.8.7.6'
|
27
|
-
spec.add_development_dependency 'redcarpet', '~> 3.3'
|
28
|
-
spec.add_development_dependency 'rspec', '~> 3.3'
|
29
|
-
spec.add_development_dependency 'simplecov', '~> 0.10.0'
|
30
|
-
spec.add_development_dependency 'coveralls', '~> 0.8.2'
|
31
|
-
spec.add_development_dependency 'webmock', '~> 1.21', '>= 1.21.0'
|
23
|
+
spec.add_runtime_dependency 'retriable', '~> 2.0'
|
32
24
|
end
|
data/lib/google_maps_service.rb
CHANGED
@@ -126,7 +126,7 @@ module GoogleMapsService::Apis
|
|
126
126
|
|
127
127
|
# Check response body for error status.
|
128
128
|
#
|
129
|
-
# @param [Hurley::Response]
|
129
|
+
# @param [Hurley::Response] response Response object.
|
130
130
|
# @param [Hash] body Response body.
|
131
131
|
def check_roads_body_error(response, body)
|
132
132
|
error = body[:error]
|
@@ -94,8 +94,6 @@ module GoogleMapsService
|
|
94
94
|
# connection: Hurley::HttpCache.new(HurleyExcon::Connection.new)
|
95
95
|
# )
|
96
96
|
#
|
97
|
-
#
|
98
|
-
#
|
99
97
|
# @option options [String] :key Secret key for accessing Google Maps Web Service.
|
100
98
|
# Can be obtained at https://developers.google.com/maps/documentation/geocoding/get-api-key#key.
|
101
99
|
# @option options [String] :client_id Client id for using Maps API for Work services.
|
@@ -111,17 +109,13 @@ module GoogleMapsService
|
|
111
109
|
# By default, the default Hurley's HTTP client connection (Net::Http) will be used.
|
112
110
|
# See https://github.com/lostisland/hurley/blob/master/README.md#connections.
|
113
111
|
def initialize(**options)
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
@connection = options[:connection] || GoogleMapsService.connection
|
122
|
-
|
123
|
-
#
|
124
|
-
initialize_qps if @queries_per_second
|
112
|
+
[:key, :client_id, :client_secret,
|
113
|
+
:retry_timeout, :queries_per_second,
|
114
|
+
:request_options, :ssl_options, :connection].each do |key|
|
115
|
+
self.instance_variable_set("@#{key}".to_sym, options[key] || GoogleMapsService.instance_variable_get("@#{key}"))
|
116
|
+
end
|
117
|
+
|
118
|
+
initialize_query_tickets
|
125
119
|
end
|
126
120
|
|
127
121
|
# Get the current HTTP client.
|
@@ -133,10 +127,12 @@ module GoogleMapsService
|
|
133
127
|
protected
|
134
128
|
|
135
129
|
# Initialize QPS queue. QPS queue is a "tickets" for calling API
|
136
|
-
def
|
137
|
-
|
138
|
-
|
139
|
-
@
|
130
|
+
def initialize_query_tickets
|
131
|
+
if @queries_per_second
|
132
|
+
@qps_queue = SizedQueue.new @queries_per_second
|
133
|
+
@queries_per_second.times do
|
134
|
+
@qps_queue << 0
|
135
|
+
end
|
140
136
|
end
|
141
137
|
end
|
142
138
|
|
@@ -144,13 +140,14 @@ module GoogleMapsService
|
|
144
140
|
# @return [Hurley::Client]
|
145
141
|
def new_client
|
146
142
|
client = Hurley::Client.new
|
143
|
+
client.request_options.query_class = Hurley::Query::Flat
|
144
|
+
client.request_options.redirection_limit = 0
|
145
|
+
client.header[:user_agent] = user_agent
|
147
146
|
|
148
147
|
client.connection = @connection if @connection
|
149
148
|
@request_options.each_pair {|key, value| client.request_options[key] = value } if @request_options
|
150
149
|
@ssl_options.each_pair {|key, value| client.ssl_options[key] = value } if @ssl_options
|
151
150
|
|
152
|
-
client.request_options.query_class = Hurley::Query::Flat
|
153
|
-
client.header[:user_agent] = user_agent
|
154
151
|
client
|
155
152
|
end
|
156
153
|
|
@@ -175,18 +172,11 @@ module GoogleMapsService
|
|
175
172
|
url = base_url + generate_auth_url(path, params, accepts_client_id)
|
176
173
|
|
177
174
|
Retriable.retriable timeout: @retry_timeout, on: RETRIABLE_ERRORS do |try|
|
178
|
-
# Get/wait the request "ticket" if QPS is configured
|
179
|
-
# Check for previous request time, it must be more than a second ago before calling new request
|
180
|
-
if @qps_queue
|
181
|
-
elapsed_since_earliest = Time.now - @qps_queue.pop
|
182
|
-
sleep(1 - elapsed_since_earliest) if elapsed_since_earliest.to_f < 1
|
183
|
-
end
|
184
|
-
|
185
175
|
begin
|
176
|
+
request_query_ticket
|
186
177
|
response = client.get url
|
187
178
|
ensure
|
188
|
-
|
189
|
-
@qps_queue << Time.now if @qps_queue
|
179
|
+
release_query_ticket
|
190
180
|
end
|
191
181
|
|
192
182
|
return custom_response_decoder.call(response) if custom_response_decoder
|
@@ -194,11 +184,30 @@ module GoogleMapsService
|
|
194
184
|
end
|
195
185
|
end
|
196
186
|
|
187
|
+
# Get/wait the request "ticket" if QPS is configured.
|
188
|
+
# Check for previous request time, it must be more than a second ago before calling new request.
|
189
|
+
#
|
190
|
+
# @return [void]
|
191
|
+
def request_query_ticket
|
192
|
+
if @qps_queue
|
193
|
+
elapsed_since_earliest = Time.now - @qps_queue.pop
|
194
|
+
sleep(1 - elapsed_since_earliest) if elapsed_since_earliest.to_f < 1
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# Release request "ticket".
|
199
|
+
#
|
200
|
+
# @return [void]
|
201
|
+
def release_query_ticket
|
202
|
+
@qps_queue << Time.now if @qps_queue
|
203
|
+
end
|
204
|
+
|
197
205
|
# Returns the path and query string portion of the request URL,
|
198
206
|
# first adding any necessary parameters.
|
199
207
|
#
|
200
208
|
# @param [String] path The path portion of the URL.
|
201
209
|
# @param [Hash] params URL parameters.
|
210
|
+
# @param [Boolean] accepts_client_id Sign the request using API {#keys} instead of {#client_id}.
|
202
211
|
#
|
203
212
|
# @return [String]
|
204
213
|
def generate_auth_url(path, params, accepts_client_id)
|
@@ -253,15 +262,15 @@ module GoogleMapsService
|
|
253
262
|
raise GoogleMapsService::Error::ClientError.new(response), 'Invalid request'
|
254
263
|
when 500..600
|
255
264
|
raise GoogleMapsService::Error::ServerError.new(response), 'Server error'
|
256
|
-
else
|
257
|
-
raise ArgumentError, 'Invalid response status code'
|
258
265
|
end
|
259
266
|
end
|
260
267
|
|
261
268
|
# Check response body for error status.
|
262
269
|
#
|
263
|
-
# @param [Hurley::Response]
|
270
|
+
# @param [Hurley::Response] response Response object.
|
264
271
|
# @param [Hash] body Response body.
|
272
|
+
#
|
273
|
+
# @return [void]
|
265
274
|
def check_body_error(response, body)
|
266
275
|
case body[:status]
|
267
276
|
when 'OK', 'ZERO_RESULTS'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_maps_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Edward Samuel Pasaribu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -45,9 +45,6 @@ dependencies:
|
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '2.0'
|
48
|
-
- - ">="
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
version: 2.0.2
|
51
48
|
type: :runtime
|
52
49
|
prerelease: false
|
53
50
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -55,127 +52,6 @@ dependencies:
|
|
55
52
|
- - "~>"
|
56
53
|
- !ruby/object:Gem::Version
|
57
54
|
version: '2.0'
|
58
|
-
- - ">="
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 2.0.2
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: bundler
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - "~>"
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '1.7'
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
72
|
-
- - "~>"
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: '1.7'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: rake
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '10.0'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '10.0'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: yard
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - "~>"
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: 0.8.7.6
|
96
|
-
type: :development
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - "~>"
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 0.8.7.6
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: redcarpet
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - "~>"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '3.3'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - "~>"
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '3.3'
|
117
|
-
- !ruby/object:Gem::Dependency
|
118
|
-
name: rspec
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
120
|
-
requirements:
|
121
|
-
- - "~>"
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: '3.3'
|
124
|
-
type: :development
|
125
|
-
prerelease: false
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
127
|
-
requirements:
|
128
|
-
- - "~>"
|
129
|
-
- !ruby/object:Gem::Version
|
130
|
-
version: '3.3'
|
131
|
-
- !ruby/object:Gem::Dependency
|
132
|
-
name: simplecov
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
134
|
-
requirements:
|
135
|
-
- - "~>"
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
version: 0.10.0
|
138
|
-
type: :development
|
139
|
-
prerelease: false
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
141
|
-
requirements:
|
142
|
-
- - "~>"
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version: 0.10.0
|
145
|
-
- !ruby/object:Gem::Dependency
|
146
|
-
name: coveralls
|
147
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
-
requirements:
|
149
|
-
- - "~>"
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
version: 0.8.2
|
152
|
-
type: :development
|
153
|
-
prerelease: false
|
154
|
-
version_requirements: !ruby/object:Gem::Requirement
|
155
|
-
requirements:
|
156
|
-
- - "~>"
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: 0.8.2
|
159
|
-
- !ruby/object:Gem::Dependency
|
160
|
-
name: webmock
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
162
|
-
requirements:
|
163
|
-
- - "~>"
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: '1.21'
|
166
|
-
- - ">="
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
version: 1.21.0
|
169
|
-
type: :development
|
170
|
-
prerelease: false
|
171
|
-
version_requirements: !ruby/object:Gem::Requirement
|
172
|
-
requirements:
|
173
|
-
- - "~>"
|
174
|
-
- !ruby/object:Gem::Version
|
175
|
-
version: '1.21'
|
176
|
-
- - ">="
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version: 1.21.0
|
179
55
|
description:
|
180
56
|
email:
|
181
57
|
- edwardsamuel92@gmail.com
|