googlemaps-services 1.2.0 → 1.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 79eb630dafebed0e332508c6dc831f9277c0265e
4
- data.tar.gz: fe3a16fb698d040c80ad5cdedaf97234d3b6c3bf
3
+ metadata.gz: 18a00c19fa244488e45d19b1072506587f597e57
4
+ data.tar.gz: 1d4bf5cef38c7d6be03bd438d2e30278eef31ee3
5
5
  SHA512:
6
- metadata.gz: 561e0cc11204546985cc8a970f95cbb6b4c90453af643b2f5edbd71525278e06f0a39be13f18927105462d250e407adc250acd2fa82041a900e31a4f1cec6e42
7
- data.tar.gz: 1c6ae80c50a9038f2273b7da4f416bf0a759b9d6ba542a0359aa3e60f74d7404a0eb6e6ceb2a957ace35c7c4f45250322c7110cf9c1cd25c71cc2dbdf3b8c43f
6
+ metadata.gz: 99aa38b29add2f487377ceef2a6cba9e9881defa8c2b6c3a0303a69bdbee8c2cfa4fd94414dda0d40fa2a4bd6b3f5a15b155dea9e66121862cd8d252a4aad270
7
+ data.tar.gz: da2efaedd9b47501bc815b005ae47e7a2f97552fcfba47bf61c89b84d5c8e64309ad4b99426cf6b30eedf6fbfc38b77cf8190a6e90abc3fc20b70c1b7b59f781
@@ -1,9 +1,9 @@
1
- require "googlemaps/services/exceptions"
2
- require "googlemaps/services/version"
3
- require "googlemaps/services/util"
4
- require "nokogiri"
5
- require "net/http"
6
- require "json"
1
+ require 'googlemaps/services/exceptions'
2
+ require 'googlemaps/services/version'
3
+ require 'googlemaps/services/util'
4
+ require 'nokogiri'
5
+ require 'net/http'
6
+ require 'json'
7
7
 
8
8
  # Core functionality, common across all API requests.
9
9
  #
@@ -13,9 +13,9 @@ module GoogleMaps
13
13
  #
14
14
  # @since 1.0.0
15
15
  module Services
16
- $USER_AGENT = "GoogleMapsRubyClient/" + VERSION
17
- $DEFAULT_BASE_URL = "https://maps.googleapis.com"
18
- $RETRIABLE_STATUSES = [500, 503, 504]
16
+ USER_AGENT = 'GoogleMapsRubyClient/' + VERSION
17
+ DEFAULT_BASE_URL = 'https://maps.googleapis.com'
18
+ RETRIABLE_STATUSES = [500, 503, 504]
19
19
 
20
20
  # Performs requests to the Google Maps API web services.
21
21
  class GoogleClient
@@ -43,30 +43,30 @@ module GoogleMaps
43
43
  attr_accessor :response_format
44
44
 
45
45
  def initialize(key:, client_id: nil, client_secret: nil, timeout: nil,
46
- connect_timeout: nil, read_timeout: nil,retry_timeout: 60, request_opts: nil,
46
+ connect_timeout: nil, read_timeout: nil,retry_timeout: 60, request_opts: {},
47
47
  queries_per_second: 10, channel: nil, response_format: :json)
48
48
  if !key && !(client_secret && client_id)
49
- raise StandardError, "Must provide API key or enterprise credentials when creationg client."
49
+ raise StandardError, 'Must provide API key or enterprise credentials when creationg client.'
50
50
  end
51
51
 
52
- if key && !key.start_with?("AIza")
53
- raise StandardError, "Invalid API key provided."
52
+ if key && !key.start_with?('AIza')
53
+ raise StandardError, 'Invalid API key provided.'
54
54
  end
55
55
 
56
56
  if channel
57
- if !client_id
58
- raise StandardError, "The channel argument must be used with a client ID."
57
+ unless client_id
58
+ raise StandardError, 'The channel argument must be used with a client ID.'
59
59
  end
60
60
 
61
- if !/^[a-zA-Z0-9._-]*$/.match(channel)
62
- raise StandardError, "The channel argument must be an ASCII alphanumeric string. The period (.), underscore (_) and hyphen (-) characters are allowed."
61
+ unless /^[a-zA-Z0-9._-]*$/.match(channel)
62
+ raise StandardError, 'The channel argument must be an ASCII alphanumeric string. The period (.), underscore (_) and hyphen (-) characters are allowed.'
63
63
  end
64
64
  end
65
65
 
66
66
  self.key = key
67
67
 
68
68
  if timeout && (connect_timeout || read_timeout)
69
- raise StandardError, "Specify either timeout, or connect_timeout and read_timeout."
69
+ raise StandardError, 'Specify either timeout, or connect_timeout and read_timeout.'
70
70
  end
71
71
 
72
72
  if connect_timeout && read_timeout
@@ -79,18 +79,16 @@ module GoogleMaps
79
79
  self.client_secret = client_secret
80
80
  self.channel = channel
81
81
  self.retry_timeout = retry_timeout
82
- self.request_opts = request_opts || {}
83
- self.request_opts.merge!({
84
- :headers => {"User-Agent" => $USER_AGENT},
85
- :timeout => self.timeout,
86
- :verify => true
87
- })
88
-
82
+ self.request_opts = request_opts.merge({
83
+ :headers => {'User-Agent' => USER_AGENT},
84
+ :timeout => self.timeout,
85
+ :verify => true
86
+ })
89
87
  self.queries_per_second = queries_per_second
90
88
  self.sent_times = Array.new
91
89
 
92
90
  if response_format
93
- raise StandardError, "Unsupported response format. Should be either :json or :xml." unless [:json, :xml].include? response_format
91
+ raise StandardError, 'Unsupported response format. Should be either :json or :xml.' unless [:json, :xml].include? response_format
94
92
  self.response_format = response_format
95
93
  end
96
94
  end
@@ -108,9 +106,9 @@ module GoogleMaps
108
106
  # @param [Hash] request_opts Additional options for the Net::HTTP client.
109
107
  #
110
108
  # @return [Hash, Array] response body, either in JSON or XML.
111
- def get(url:, params:, first_request_time: nil, retry_counter: nil, base_url: $DEFAULT_BASE_URL,
109
+ def get(url:, params:, first_request_time: nil, retry_counter: nil, base_url: DEFAULT_BASE_URL,
112
110
  accepts_clientid: true, extract_body: nil, request_opts: nil)
113
- if !first_request_time
111
+ unless first_request_time
114
112
  first_request_time = Util.current_time
115
113
  end
116
114
 
@@ -125,7 +123,7 @@ module GoogleMaps
125
123
  # at 1, so subtract that first.
126
124
  delay_seconds = 0.5 * 1.5 ** (retry_counter - 1)
127
125
  # Jitter this value by 50% and pause.
128
- sleep(delay_seconds * (random.random() + 0.5))
126
+ sleep(delay_seconds * (random.random + 0.5))
129
127
  end
130
128
 
131
129
  authed_url = generate_auth_url(url, params, accepts_clientid)
@@ -143,7 +141,7 @@ module GoogleMaps
143
141
  request_opts[:headers].each { |header,value| req.add_field(header, value) }
144
142
 
145
143
  http = Net::HTTP.new(uri.host, uri.port)
146
- http.use_ssl = (uri.scheme == "https")
144
+ http.use_ssl = (uri.scheme == 'https')
147
145
  # Get HTTP response
148
146
  resp = http.request(req)
149
147
 
@@ -152,10 +150,10 @@ module GoogleMaps
152
150
  when Net::HTTPRequestTimeOut
153
151
  raise Timeout
154
152
  when Exception
155
- raise TransportError, "HTTP GET request failed."
153
+ raise TransportError, 'HTTP GET request failed.'
156
154
  end
157
155
 
158
- if $RETRIABLE_STATUSES.include? resp.code.to_i
156
+ if RETRIABLE_STATUSES.include? resp.code.to_i
159
157
  # Retry request
160
158
  self.get(url, params, first_request_time, retry_counter + 1,
161
159
  base_url, accepts_clientid, extract_body)
@@ -185,9 +183,8 @@ module GoogleMaps
185
183
  self.sent_times.push(Util.current_time)
186
184
  return result
187
185
  rescue RetriableRequest
188
- # retry request
189
- return self.get(url, params, first_request_time, retry_counter + 1,
190
- base_url, accepts_clientid, extract_body)
186
+ # Retry request
187
+ return self.get(url, params, first_request_time, retry_counter + 1, base_url, accepts_clientid, extract_body)
191
188
  end
192
189
  end
193
190
 
@@ -201,7 +198,7 @@ module GoogleMaps
201
198
  def get_json_body(resp)
202
199
  status_code = resp.code.to_i
203
200
  if status_code >= 300 && status_code < 400
204
- return resp["location"]
201
+ return resp['location']
205
202
  end
206
203
 
207
204
  if status_code != 200
@@ -212,20 +209,20 @@ module GoogleMaps
212
209
  begin
213
210
  body = JSON.parse(resp.body)
214
211
  rescue JSON::ParserError
215
- raise APIError.new(status_code), "Received a malformed JSON response."
212
+ raise APIError.new(status_code), 'Received a malformed JSON response.'
216
213
  end
217
214
 
218
- api_status = body["status"]
219
- if api_status == "OK" || api_status == "ZERO_RESULTS"
215
+ api_status = body['status']
216
+ if api_status == 'OK' || api_status == 'ZERO_RESULTS'
220
217
  return body
221
218
  end
222
219
 
223
- if api_status == "OVER_QUERY_LIMIT"
220
+ if api_status == 'OVER_QUERY_LIMIT'
224
221
  raise RetriableRequest
225
222
  end
226
223
 
227
- if body.key?("error_message")
228
- raise APIError.new(api_status), body["error_message"]
224
+ if body.key?('error_message')
225
+ raise APIError.new(api_status), body['error_message']
229
226
  else
230
227
  raise APIError.new(api_status)
231
228
  end
@@ -241,7 +238,7 @@ module GoogleMaps
241
238
  def get_xml_body(resp)
242
239
  status_code = resp.code.to_i
243
240
  if status_code >= 300 && status_code < 400
244
- return resp["location"]
241
+ return resp['location']
245
242
  end
246
243
 
247
244
  if status_code != 200
@@ -251,19 +248,19 @@ module GoogleMaps
251
248
  begin
252
249
  doc = Nokogiri::XML.parse(resp.body)
253
250
  rescue
254
- raise APIError.new(status_code), "Received a malformed XML response."
251
+ raise APIError.new(status_code), 'Received a malformed XML response.'
255
252
  end
256
253
 
257
- api_status = doc.xpath("//status").first.text
258
- if api_status == "OK" || api_status == "ZERO_RESULTS"
254
+ api_status = doc.xpath('//status').first.text
255
+ if api_status == 'OK' || api_status == 'ZERO_RESULTS'
259
256
  return doc
260
257
  end
261
258
 
262
- if api_status == "OVER_QUERY_LIMIT"
259
+ if api_status == 'OVER_QUERY_LIMIT'
263
260
  raise RetriableRequest
264
261
  end
265
262
 
266
- error_message = doc.xpath("//error_message")
263
+ error_message = doc.xpath('//error_message')
267
264
  if error_message
268
265
  raise APIError.new(api_status), error_message.text
269
266
  else
@@ -283,21 +280,21 @@ module GoogleMaps
283
280
  def generate_auth_url(path, params={}, accepts_clientid)
284
281
  if accepts_clientid && self.client_id && self.client_secret
285
282
  if self.channel
286
- params["channel"] = self.channel
283
+ params['channel'] = self.channel
287
284
  end
288
- params["client"] = self.client_id
285
+ params['client'] = self.client_id
289
286
 
290
- path = [path, Util.urlencode_params(params)].join("?")
287
+ path = [path, Util.urlencode_params(params)].join('?')
291
288
  sig = Util.sign_hmac(self.client_secret, path)
292
- return path + "&signature=" + sig
289
+ return path + '&signature=' + sig
293
290
  end
294
291
 
295
292
  if self.key
296
- params["key"] = self.key
297
- return path + "?" + Util.urlencode_params(params)
293
+ params['key'] = self.key
294
+ return path + '?' + Util.urlencode_params(params)
298
295
  end
299
296
 
300
- raise StandardError, "Must provide API key for this API. It does not accept enterprise credentials."
297
+ raise StandardError, 'Must provide API key for this API. It does not accept enterprise credentials.'
301
298
  end
302
299
 
303
300
  private :get_json_body, :get_xml_body, :generate_auth_url
@@ -1,8 +1,8 @@
1
- require "googlemaps/services/util"
1
+ require 'googlemaps/services/util'
2
2
 
3
3
  module GoogleMaps
4
4
  module Services
5
- $TRAVEL_MODES = ["driving", "walking", "bicycling", "transit"]
5
+ TRAVEL_MODES = %w(driving walking bicycling transit)
6
6
 
7
7
  # Performs requests to the Google Maps Directions API.
8
8
  #
@@ -48,74 +48,74 @@ module GoogleMaps
48
48
  arrival_time: nil, optimize_waypoints: false, transit_mode: nil,
49
49
  transit_routing_preference: nil, traffic_model: nil)
50
50
  params = {
51
- "origin" => Convert.to_latlng(origin),
52
- "destination" => Convert.to_latlng(destination)
51
+ 'origin' => Convert.to_latlng(origin),
52
+ 'destination' => Convert.to_latlng(destination)
53
53
  }
54
54
 
55
55
  if mode
56
- if !$TRAVEL_MODES.include? mode
57
- raise StandardError, "invalid travel mode."
56
+ unless TRAVEL_MODES.include? mode
57
+ raise StandardError, 'invalid travel mode.'
58
58
  end
59
- params["mode"] = mode
59
+ params['mode'] = mode
60
60
  end
61
61
 
62
62
  if waypoints
63
63
  waypoints = Convert.piped_location(waypoints)
64
64
  if optimize_waypoints
65
- waypoints = "optimize:true|" + waypoints
65
+ waypoints = 'optimize:true|' + waypoints
66
66
  end
67
- params["waypoints"] = waypoints
67
+ params['waypoints'] = waypoints
68
68
  end
69
69
 
70
70
  if alternatives
71
- params["alternatives"] = true
71
+ params['alternatives'] = true
72
72
  end
73
73
 
74
74
  if avoid
75
- params["avoid"] = Convert.join_array("|", avoid)
75
+ params['avoid'] = Convert.join_array('|', avoid)
76
76
  end
77
77
 
78
78
  if language
79
- params["language"] = language
79
+ params['language'] = language
80
80
  end
81
81
 
82
82
  if units
83
- params["units"] = units
83
+ params['units'] = units
84
84
  end
85
85
 
86
86
  if region
87
- params["region"] = region
87
+ params['region'] = region
88
88
  end
89
89
 
90
90
  if departure_time
91
- params["departure_time"] = Convert.unix_time(departure_time)
91
+ params['departure_time'] = Convert.unix_time(departure_time)
92
92
  end
93
93
 
94
94
  if arrival_time
95
- params["arrival_time"] = Convert.unix_time(arrival_time)
95
+ params['arrival_time'] = Convert.unix_time(arrival_time)
96
96
  end
97
97
 
98
98
  if departure_time && arrival_time
99
- raise StandardError, "should not specify both departure_time and arrival_time."
99
+ raise StandardError, 'should not specify both departure_time and arrival_time.'
100
100
  end
101
101
 
102
102
  if transit_mode
103
- params["transit_mode"] = Convert.join_array("|", transit_mode)
103
+ params['transit_mode'] = Convert.join_array('|', transit_mode)
104
104
  end
105
105
 
106
106
  if transit_routing_preference
107
- params["transit_routing_preference"] = transit_routing_preference
107
+ params['transit_routing_preference'] = transit_routing_preference
108
108
  end
109
109
 
110
110
  if traffic_model
111
- params["traffic_model"] = traffic_model
111
+ params['traffic_model'] = traffic_model
112
112
  end
113
113
 
114
114
  case self.client.response_format
115
115
  when :xml
116
- self.client.get(url: "/maps/api/directions/xml", params: params).xpath("//route")
116
+ self.client.get(url: '/maps/api/directions/xml', params: params).xpath('//route')
117
117
  else
118
- self.client.get(url: "/maps/api/directions/json", params: params)["routes"]
118
+ self.client.get(url: '/maps/api/directions/json', params: params)['routes']
119
119
  end
120
120
  end
121
121
  end
@@ -1,9 +1,8 @@
1
- require "googlemaps/services/util"
1
+ require 'googlemaps/services/util'
2
2
 
3
3
  module GoogleMaps
4
4
  module Services
5
-
6
- $AVOIDS = ["tolls", "highways", "ferries"]
5
+ AVOIDS = %w(tolls highways ferries)
7
6
 
8
7
  # Performs requests to the Google Maps Distance Matrix API.
9
8
  #
@@ -41,57 +40,53 @@ module GoogleMaps
41
40
  units: nil, departure_time: nil, arrival_time: nil, transit_mode: nil,
42
41
  transit_routing_preference: nil, traffic_model: nil)
43
42
  params = {
44
- "origins" => Convert.piped_location(origins),
45
- "destinations" => Convert.piped_location(destinations)
43
+ 'origins' => Convert.piped_location(origins),
44
+ 'destinations' => Convert.piped_location(destinations)
46
45
  }
47
46
 
48
47
  if mode
49
- if !$TRAVEL_MODES.include? mode
50
- raise StandardError, "Invalid travel mode."
51
- end
52
- params["mode"] = mode
48
+ raise StandardError, 'Invalid travel mode.' unless TRAVEL_MODES.include? mode
49
+ params['mode'] = mode
53
50
  end
54
51
 
55
52
  if language
56
- params["language"] = language
53
+ params['language'] = language
57
54
  end
58
55
 
59
56
  if avoid
60
- if !$AVOIDS.include? avoid
61
- raise StandardError, "Invalid route restriction."
62
- end
63
- params["avoid"] = avoid
57
+ raise StandardError, 'Invalid route restriction.' unless AVOIDS.include? avoid
58
+ params['avoid'] = avoid
64
59
  end
65
60
 
66
61
  if units
67
- params["units"] = units
62
+ params['units'] = units
68
63
  end
69
64
 
70
65
  if departure_time
71
- params["departure_time"] = Convert.unix_time(departure_time)
66
+ params['departure_time'] = Convert.unix_time(departure_time)
72
67
  end
73
68
 
74
69
  if arrival_time
75
- params["arrival_time"] = Convert.unix_time(arrival_time)
70
+ params['arrival_time'] = Convert.unix_time(arrival_time)
76
71
  end
77
72
 
78
73
  if departure_time && arrival_time
79
- raise StandardError, "Should not specify both departure_time and arrival_time."
74
+ raise StandardError, 'Should not specify both departure_time and arrival_time.'
80
75
  end
81
76
 
82
77
  if transit_mode
83
- params["transit_mode"] = Convert.join_arrayt("|", transit_mode)
78
+ params['transit_mode'] = Convert.join_array('|', transit_mode)
84
79
  end
85
80
 
86
81
  if transit_routing_preference
87
- params["transit_routing_preference"] = transit_routing_preference
82
+ params['transit_routing_preference'] = transit_routing_preference
88
83
  end
89
84
 
90
85
  if traffic_model
91
- params["traffic_model"] = traffic_model
86
+ params['traffic_model'] = traffic_model
92
87
  end
93
88
 
94
- self.client.get(url: "/maps/api/distancematrix/#{self.client.response_format}", params: params).class
89
+ self.client.get(url: "/maps/api/distancematrix/#{self.client.response_format}", params: params)
95
90
  end
96
91
  end
97
92
  end
@@ -1,4 +1,4 @@
1
- require "googlemaps/services/util"
1
+ require 'googlemaps/services/util'
2
2
 
3
3
 
4
4
  module GoogleMaps
@@ -29,30 +29,31 @@ module GoogleMaps
29
29
  params = {}
30
30
 
31
31
  if path && locations
32
- raise StandardError, "Should not specify both path and locations."
32
+ raise StandardError, 'Should not specify both path and locations.'
33
33
  end
34
34
 
35
35
  if locations
36
- params["locations"] = Convert.shortest_path(locations)
36
+ params['locations'] = Convert.shortest_path(locations)
37
37
  end
38
38
 
39
39
  if path
40
- if path.is_a? String
40
+ case path.class
41
+ when String
41
42
  path = "enc:#{path}"
42
- elsif path.is_a? Array
43
+ when Array
43
44
  path = Convert.shortest_path(path)
44
45
  else
45
- raise TypeError, "Path should be either a String or an Array."
46
+ raise TypeError, 'Path should be either a String or an Array.'
46
47
  end
47
48
 
48
- params = { "path" => path, "samples" => samples }
49
+ params = {'path' => path, 'samples' => samples }
49
50
  end
50
51
 
51
52
  case self.client.response_format
52
53
  when :xml
53
- self.client.get(url: "/maps/api/elevation/xml", params: params).xpath("//result")
54
+ self.client.get(url: '/maps/api/elevation/xml', params: params).xpath('//result')
54
55
  else
55
- self.client.get(url: "/maps/api/elevation/json", params: params)["results"]
56
+ self.client.get(url: '/maps/api/elevation/json', params: params)['results']
56
57
  end
57
58
  end
58
59
  end
@@ -42,7 +42,7 @@ module GoogleMaps
42
42
  #
43
43
  # @return [String] Human-readable error string.
44
44
  def to_s
45
- "The request timed out."
45
+ 'The request timed out.'
46
46
  end
47
47
  end
48
48
 
@@ -1,4 +1,4 @@
1
- require "googlemaps/services/util"
1
+ require 'googlemaps/services/util'
2
2
 
3
3
 
4
4
  module GoogleMaps
@@ -34,30 +34,30 @@ module GoogleMaps
34
34
  params = {}
35
35
 
36
36
  if address
37
- params["address"] = address
37
+ params['address'] = address
38
38
  end
39
39
 
40
40
  if components
41
- params["components"] = Convert.components(components)
41
+ params['components'] = Convert.components(components)
42
42
  end
43
43
 
44
44
  if bounds
45
- params["bounds"] = Convert.bounds(bounds)
45
+ params['bounds'] = Convert.bounds(bounds)
46
46
  end
47
47
 
48
48
  if region
49
- params["region"] = region
49
+ params['region'] = region
50
50
  end
51
51
 
52
52
  if language
53
- params["language"] = language
53
+ params['language'] = language
54
54
  end
55
55
 
56
56
  case self.client.response_format
57
57
  when :xml
58
- self.client.get(url: "/maps/api/geocode/xml", params: params).xpath("//result")
58
+ self.client.get(url: '/maps/api/geocode/xml', params: params).xpath('//result')
59
59
  else
60
- self.client.get(url: "/maps/api/geocode/json", params: params)["results"]
60
+ self.client.get(url: '/maps/api/geocode/json', params: params)['results']
61
61
  end
62
62
  end
63
63
  end
@@ -86,28 +86,28 @@ module GoogleMaps
86
86
  # Check if latlng param is a place_id string.
87
87
  # 'place_id' strings do not contain commas; latlng strings do.
88
88
  if latlng.is_a?(String) && !latlng.include?("'")
89
- params = {"place_id" => latlng}
89
+ params = {'place_id' => latlng}
90
90
  else
91
- params = {"latlng" => Convert.to_latlng(latlng)}
91
+ params = {'latlng' => Convert.to_latlng(latlng)}
92
92
  end
93
93
 
94
94
  if result_type
95
- params["result_type"] = Convert.join_array("|", result_type)
95
+ params['result_type'] = Convert.join_array('|', result_type)
96
96
  end
97
97
 
98
98
  if location_type
99
- params["location_type"] = Convert.join_array("|", location_type)
99
+ params['location_type'] = Convert.join_array('|', location_type)
100
100
  end
101
101
 
102
102
  if language
103
- params["language"] = language
103
+ params['language'] = language
104
104
  end
105
105
 
106
106
  case self.client.response_format
107
107
  when :xml
108
- self.client.get(url: "/maps/api/geocode/xml", params: params).xpath("//result")
108
+ self.client.get(url: '/maps/api/geocode/xml', params: params).xpath('//result')
109
109
  else
110
- self.client.get(url: "/maps/api/geocode/json", params: params)["results"]
110
+ self.client.get(url: '/maps/api/geocode/json', params: params)['results']
111
111
  end
112
112
  end
113
113
  end
@@ -1,4 +1,4 @@
1
- require "googlemaps/services/util"
1
+ require 'googlemaps/services/util'
2
2
 
3
3
  module GoogleMaps
4
4
  module Services
@@ -27,8 +27,8 @@ module GoogleMaps
27
27
  # @return [Hash, Nokogiri::XML::Document] Valid JSON or XML response.
28
28
  def search(query:, location: nil, radius: nil, language: nil, min_price: nil,
29
29
  max_price: nil, open_now: false, type: nil, page_token: nil)
30
- _places(url_part: "text", query: query, location: location, radius: radius,
31
- language: language, min_price: min_price, max_price: max_price,
30
+ _places(url_part: 'text', query: query, location: location, radius: radius,
31
+ language: language, min_price: min_price, max_price: max_price,
32
32
  open_now: open_now, type: type, page_token: page_token)
33
33
  end
34
34
 
@@ -49,15 +49,15 @@ module GoogleMaps
49
49
  # @return [Hash, Nokogiri::XML::Document] Valid JSON or XML response.
50
50
  def nearby(location:, radius: nil, keyword: nil, language: nil, min_price: nil,
51
51
  max_price: nil, name: nil, open_now: false, rank_by: nil, type: nil, page_token: nil)
52
- if rank_by == "distance"
52
+ if rank_by == 'distance'
53
53
  if !(keyword || name || type)
54
- raise StandardError, "either a keyword, name or type arg is required when rank_by is set to distance."
54
+ raise StandardError, 'either a keyword, name or type arg is required when rank_by is set to distance.'
55
55
  elsif radius
56
- raise StandardError, "radius cannot be specified when rank_by is set to distance."
56
+ raise StandardError, 'radius cannot be specified when rank_by is set to distance.'
57
57
  end
58
58
  end
59
59
 
60
- _places(url_part: "nearby", location: location, radius: radius, keyword: keyword, language: language,
60
+ _places(url_part: 'nearby', location: location, radius: radius, keyword: keyword, language: language,
61
61
  min_price: min_price, max_price: max_price, name: name, open_now: open_now, rank_by: rank_by,
62
62
  type: type, page_token: page_token)
63
63
  end
@@ -76,13 +76,13 @@ module GoogleMaps
76
76
  # @return [Hash, Nokogiri::XML::Document] Valid JSON or XML response.
77
77
  def radar(location:, radius:, keyword: nil, min_price: nil,
78
78
  max_price: nil, name: nil, open_now: false, type: nil)
79
- if !(keyword || name || type)
80
- raise StandardError, "either a keyword, name, or type arg is required."
79
+ unless keyword || name || type
80
+ raise StandardError, 'either a keyword, name, or type arg is required.'
81
81
  end
82
82
 
83
- _places(url_part: "radar", location: location, radius: radius,
84
- keyword: keyword, min_price: min_price, max_price: max_price,
85
- name: name, open_now: open_now, type: type)
83
+ _places(url_part: 'radar', location: location, radius: radius,
84
+ keyword: keyword, min_price: min_price, max_price: max_price,
85
+ name: name, open_now: open_now, type: type)
86
86
  end
87
87
 
88
88
  # Handler for "places", "places_nearby" and "places_radar" queries.
@@ -90,52 +90,51 @@ module GoogleMaps
90
90
  def _places(url_part:, query: nil, location: nil, radius: nil, keyword: nil, language: nil,
91
91
  min_price: 0, max_price: 4, name: nil, open_now: false, rank_by: nil, type: nil,
92
92
  page_token: nil)
93
- params = { "minprice" => min_price, "maxprice" => max_price }
93
+ params = {'minprice' => min_price, 'maxprice' => max_price }
94
94
 
95
95
  if query
96
- params["query"] = query
96
+ params['query'] = query
97
97
  end
98
98
 
99
99
  if location
100
- params["location"] = Convert.to_latlng(location)
100
+ params['location'] = Convert.to_latlng(location)
101
101
  end
102
102
 
103
103
  if radius
104
- params["radius"] = radius
104
+ params['radius'] = radius
105
105
  end
106
106
 
107
107
  if keyword
108
- params["keyword"] = keyword
108
+ params['keyword'] = keyword
109
109
  end
110
110
 
111
111
  if language
112
- params["language"] = language
112
+ params['language'] = language
113
113
  end
114
114
 
115
115
  if name
116
- params["name"] = Convert.join_array(" ", name)
116
+ params['name'] = Convert.join_array(' ', name)
117
117
  end
118
118
 
119
119
  if open_now
120
- params["opennow"] = "true"
120
+ params['opennow'] = 'true'
121
121
  end
122
122
 
123
123
  if rank_by
124
- params["rankby"] = rank_by
124
+ params['rankby'] = rank_by
125
125
  end
126
126
 
127
127
  if type
128
- params["type"] = type
128
+ params['type'] = type
129
129
  end
130
130
 
131
131
  if page_token
132
- params["pagetoken"] = page_token
132
+ params['pagetoken'] = page_token
133
133
  end
134
134
 
135
135
  self.client.get(url: "/maps/api/place/#{url_part}search/#{self.client.response_format}", params: params)
136
136
  end
137
137
 
138
-
139
138
  # Comprehensive details for an individual place.
140
139
  #
141
140
  # @param [String] place_id A textual identifier that uniquely identifies a place, returned from a Places search.
@@ -143,9 +142,9 @@ module GoogleMaps
143
142
  #
144
143
  # @return [Hash, Nokogiri::XML::Document] Valid JSON or XML response.
145
144
  def place_details(place_id:, language: nil)
146
- params = { "placeid" => place_id }
145
+ params = {'placeid' => place_id }
147
146
  if language
148
- params["language"] = language
147
+ params['language'] = language
149
148
  end
150
149
 
151
150
  self.client.get(url: "/maps/api/place/details/#{self.client.response_format}", params: params)
@@ -159,21 +158,21 @@ module GoogleMaps
159
158
  #
160
159
  # @return [String] URL of the photo.
161
160
  def place_photo(photo_reference:, max_width: nil, max_height: nil)
162
- if !(max_width || max_height)
163
- raise StandardError, "a max_width or max_height arg is required"
161
+ unless max_width || max_height
162
+ raise StandardError, 'a max_width or max_height arg is required'
164
163
  end
165
164
 
166
- params = {"photoreference" => photo_reference}
165
+ params = {'photoreference' => photo_reference}
167
166
 
168
167
  if max_width
169
- params["maxwidth"] = max_width
168
+ params['maxwidth'] = max_width
170
169
  end
171
170
 
172
171
  if max_height
173
- params["maxheight"] = max_height
172
+ params['maxheight'] = max_height
174
173
  end
175
174
 
176
- self.client.get(url: "/maps/api/place/photo", params: params)
175
+ self.client.get(url: '/maps/api/place/photo', params: params)
177
176
  end
178
177
 
179
178
  # Returns Place predictions given a textual search string and optional geographic bounds.
@@ -202,7 +201,7 @@ module GoogleMaps
202
201
  #
203
202
  # @return [Array, Nokogiri::XML::NodeSet] Array of predictions.
204
203
  def autocomplete_query(input_text:, offset: nil, location: nil, radius: nil, language: nil)
205
- _autocomplete(url_part: "query", input_text: input_text, offset: offset,
204
+ _autocomplete(url_part: 'query', input_text: input_text, offset: offset,
206
205
  location: location, radius: radius, language: language)
207
206
  end
208
207
 
@@ -210,37 +209,37 @@ module GoogleMaps
210
209
  # @private
211
210
  def _autocomplete(url_part:, input_text:, offset: nil, location: nil,
212
211
  radius: nil, language: nil, type: nil, components: nil)
213
- params = { "input" => input_text }
212
+ params = {'input' => input_text }
214
213
 
215
214
  if offset
216
- params["offset"] = offset
215
+ params['offset'] = offset
217
216
  end
218
217
 
219
218
  if location
220
- params["location"] = Convert.to_latlng(location)
219
+ params['location'] = Convert.to_latlng(location)
221
220
  end
222
221
 
223
222
  if radius
224
- params["radius"] = radius
223
+ params['radius'] = radius
225
224
  end
226
225
 
227
226
  if language
228
- params["language"] = language
227
+ params['language'] = language
229
228
  end
230
229
 
231
230
  if type
232
- params["type"] = type
231
+ params['type'] = type
233
232
  end
234
233
 
235
234
  if components
236
- params["components"] = Convert.components(components)
235
+ params['components'] = Convert.components(components)
237
236
  end
238
237
 
239
238
  case self.client.response_format
240
239
  when :xml
241
- self.client.get(url: "/maps/api/place/#{url_part}autocomplete/xml", params: params).xpath("//prediction")
240
+ self.client.get(url: "/maps/api/place/#{url_part}autocomplete/xml", params: params).xpath('//prediction')
242
241
  else
243
- self.client.get(url: "/maps/api/place/#{url_part}autocomplete/json", params: params)["predictions"]
242
+ self.client.get(url: "/maps/api/place/#{url_part}autocomplete/json", params: params)['predictions']
244
243
  end
245
244
  end
246
245
 
@@ -1,11 +1,10 @@
1
- require "googlemaps/services/exceptions"
2
- require "googlemaps/services/util"
3
- require "json"
1
+ require 'googlemaps/services/exceptions'
2
+ require 'googlemaps/services/util'
3
+ require 'json'
4
4
 
5
5
  module GoogleMaps
6
6
  module Services
7
-
8
- $ROADS_BASE_URL = "https://roads.googleapis.com"
7
+ ROADS_BASE_URL = 'https://roads.googleapis.com'
9
8
 
10
9
  # Performs requests to the Google Maps Roads API.
11
10
  class Roads
@@ -17,19 +16,19 @@ module GoogleMaps
17
16
  begin
18
17
  body = JSON.parse(resp.body)
19
18
  rescue JSON::ParserError
20
- raise APIError.new(status_code), "Received malformed response."
19
+ raise APIError.new(status_code), 'Received malformed response.'
21
20
  end
22
21
 
23
- if body.key?("error")
24
- error = body["error"]
25
- status = error["status"]
22
+ if body.key?('error')
23
+ error = body['error']
24
+ status = error['status']
26
25
 
27
- if status == "RESOURCE_EXHAUSTED"
26
+ if status == 'RESOURCE_EXHAUSTED'
28
27
  raise RetriableRequest
29
28
  end
30
29
 
31
- if error.key?("message")
32
- raise APIError.new(status), error["message"]
30
+ if error.key?('message')
31
+ raise APIError.new(status), error['message']
33
32
  else
34
33
  raise APIError.new(status)
35
34
  end
@@ -59,14 +58,14 @@ module GoogleMaps
59
58
  #
60
59
  # @return [Array] Array of snapped points.
61
60
  def snap_to_roads(path:, interpolate: false)
62
- params = { "path" => Convert.piped_location(path) }
61
+ params = {'path' => Convert.piped_location(path) }
63
62
 
64
63
  if interpolate
65
- params["interpolate"] = "true"
64
+ params['interpolate'] = 'true'
66
65
  end
67
66
 
68
- self.client.get(url: "/v1/snapToRoads", params: params, base_url: $ROADS_BASE_URL,
69
- accepts_clientid: false, extract_body: @@_roads_extract)["snappedPoints"]
67
+ self.client.get(url: '/v1/snapToRoads', params: params, base_url: ROADS_BASE_URL,
68
+ accepts_clientid: false, extract_body: @@_roads_extract)['snappedPoints']
70
69
  end
71
70
 
72
71
  # Returns the posted speed limit (in km/h) for given road segments.
@@ -78,10 +77,10 @@ module GoogleMaps
78
77
  def speed_limits(place_ids:)
79
78
  raise StandardError, "#{__method__.to_s} expected an Array for place_ids." unless place_ids.is_a? Array
80
79
 
81
- params = { "placeId" => place_ids }
80
+ params = {'placeId' => place_ids}
82
81
 
83
- self.client.get(url: "/v1/speedLimits", params: params, base_url: $ROADS_BASE_URL,
84
- accepts_clientid: false, extract_body: @@_roads_extract)["speedLimits"]
82
+ self.client.get(url: '/v1/speedLimits', params: params, base_url: ROADS_BASE_URL,
83
+ accepts_clientid: false, extract_body: @@_roads_extract)['speedLimits']
85
84
  end
86
85
 
87
86
  # Returns the posted speed limit (in km/h) for given road segments.
@@ -91,9 +90,9 @@ module GoogleMaps
91
90
  #
92
91
  # @return [Hash] Hash with an array of speed limits and an array of the snapped points.
93
92
  def snapped_speed_limits(path:)
94
- params = { "path" => Convert.piped_location(path) }
93
+ params = {'path' => Convert.piped_location(path)}
95
94
 
96
- self.client.get(url: "/v1/speedLimits", params: params, base_url: $ROADS_BASE_URL,
95
+ self.client.get(url: '/v1/speedLimits', params: params, base_url: ROADS_BASE_URL,
97
96
  accepts_clientid: false, extract_body: @@_roads_extract)
98
97
  end
99
98
 
@@ -105,11 +104,12 @@ module GoogleMaps
105
104
  #
106
105
  # @return [Array] An array of snapped points.
107
106
  def nearest_roads(points:)
108
- params = { "points" => Convert.piped_location(points) }
107
+ params = {'points' => Convert.piped_location(points)}
109
108
 
110
- self.client.get(url: "/v1/nearestRoads", params: params, base_url: $ROADS_BASE_URL,
111
- accepts_clientid: false, extract_body: @@_roads_extract)["snappedPoints"]
109
+ self.client.get(url: '/v1/nearestRoads', params: params, base_url: ROADS_BASE_URL,
110
+ accepts_clientid: false, extract_body: @@_roads_extract)['snappedPoints']
112
111
  end
113
112
  end
113
+
114
114
  end
115
115
  end
@@ -1,4 +1,4 @@
1
- require "googlemaps/services/util"
1
+ require 'googlemaps/services/util'
2
2
 
3
3
  module GoogleMaps
4
4
  module Services
@@ -27,12 +27,12 @@ module GoogleMaps
27
27
  # @return [Hash] Valid JSON or XML response.
28
28
  def query(location:, timestamp: nil, language: nil)
29
29
  params = {
30
- "location" => Convert.to_latlng(location),
31
- "timestamp" => Convert.unix_time(timestamp || Util.current_utctime)
30
+ 'location' => Convert.to_latlng(location),
31
+ 'timestamp' => Convert.unix_time(timestamp || Util.current_utctime)
32
32
  }
33
33
 
34
34
  if language
35
- params["language"] = language
35
+ params['language'] = language
36
36
  end
37
37
 
38
38
  self.client.get(url: "/maps/api/timezone/#{self.client.response_format}", params: params)
@@ -1,8 +1,8 @@
1
- require "net/http"
2
- require "openssl"
3
- require "base64"
4
- require "date"
5
- require "erb"
1
+ require 'net/http'
2
+ require 'openssl'
3
+ require 'base64'
4
+ require 'date'
5
+ require 'erb'
6
6
 
7
7
  module GoogleMaps
8
8
  module Services
@@ -12,7 +12,7 @@ module GoogleMaps
12
12
  if has_key?(meth.to_s)
13
13
  self[meth.to_s]
14
14
  else
15
- raise NoMethodError, 'undefined method #{meth} for #{self}'
15
+ raise NoMethodError, "undefined method #{meth} for #{self}"
16
16
  end
17
17
  end
18
18
  end
@@ -102,11 +102,12 @@ module GoogleMaps
102
102
  #
103
103
  # @return [String] seconds since unix epoch.
104
104
  def self.unix_time(val)
105
- if val.is_a? Integer
105
+ case val
106
+ when Integer
106
107
  val.to_s
107
- elsif val.is_a? Time
108
+ when Time
108
109
  val.to_i.to_s
109
- elsif val.is_a? Date
110
+ when Date
110
111
  val.to_time.to_i.to_s
111
112
  else
112
113
  raise TypeError, "#{__method__.to_s} expected value to be Integer, Time or Date."
@@ -123,9 +124,10 @@ module GoogleMaps
123
124
  #
124
125
  # @return [String] comma-separated string.
125
126
  def self.to_latlng(arg)
126
- if arg.is_a? String
127
+ case arg
128
+ when String
127
129
  arg
128
- elsif arg.is_a? Hash
130
+ when Hash
129
131
  "#{self.format_float(arg[:lat])},#{self.format_float(arg[:lng])}"
130
132
  else
131
133
  raise TypeError, "#{__method__.to_s} expected location to be String or Hash."
@@ -140,7 +142,7 @@ module GoogleMaps
140
142
  #
141
143
  # @return [String] formatted value of lat or lng float
142
144
  def self.format_float(arg)
143
- arg.to_s.chomp("0").chomp(".")
145
+ arg.to_s.chomp('0').chomp('.')
144
146
  end
145
147
 
146
148
  # Joins an array of locations into a pipe separated string, handling
@@ -153,8 +155,8 @@ module GoogleMaps
153
155
  #
154
156
  # @return [String] pipe-separated string.
155
157
  def self.piped_location(arg)
156
- raise TypeError, "#{__method__.to_s} expected argument to be an Array." unless arg.instance_of? ::Array
157
- arg.map { |location| to_latlng(location) }.join("|")
158
+ raise TypeError, "#{__method__.to_s} expected argument to be an Array." unless arg.instance_of? Array
159
+ arg.map { |location| to_latlng(location) }.join('|')
158
160
  end
159
161
 
160
162
  # If arg is array-like, then joins it with sep
@@ -179,9 +181,8 @@ module GoogleMaps
179
181
  raise TypeError, "#{__method__.to_s} expected a Hash of components." unless arg.is_a? Hash
180
182
 
181
183
  arg.map { |c, val|
182
- ArrayBox.wrap(val).map {|elem| "#{c}:#{elem}"}
183
- .sort_by(&:downcase)
184
- }.join("|")
184
+ ArrayBox.wrap(val).map {|elem| "#{c}:#{elem}"}.sort_by(&:downcase)
185
+ }.join('|')
185
186
  end
186
187
 
187
188
  # Converts a lat/lng bounds to a comma- and pipe-separated string.
@@ -212,7 +213,7 @@ module GoogleMaps
212
213
  def self.encode_polyline(points)
213
214
  raise TypeError, "#{__method__.to_s} expected an Array of points." unless points.is_a? Array
214
215
  last_lat, last_lng = 0, 0
215
- result = ""
216
+ result = ''
216
217
  points.each { |point|
217
218
  lat = (point[:lat] * 1e5).round.to_i
218
219
  lng = (point[:lng] * 1e5).round.to_i
@@ -1,5 +1,5 @@
1
1
  module GoogleMaps
2
2
  module Services
3
- VERSION = "1.2.0"
3
+ VERSION = '1.2.5'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: googlemaps-services
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Faissal Elamraoui
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-28 00:00:00.000000000 Z
11
+ date: 2016-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
111
  version: '0'
112
112
  requirements: []
113
113
  rubyforge_project:
114
- rubygems_version: 2.6.6
114
+ rubygems_version: 2.5.1
115
115
  signing_key:
116
116
  specification_version: 4
117
117
  summary: Ruby Client library for Google Maps API Web Services