googlemaps-services 1.3.5 → 1.4.0
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/lib/googlemaps/services/client.rb +15 -16
- data/lib/googlemaps/services/directions.rb +5 -6
- data/lib/googlemaps/services/distancematrix.rb +4 -5
- data/lib/googlemaps/services/elevation.rb +2 -3
- data/lib/googlemaps/services/geocoding.rb +4 -4
- data/lib/googlemaps/services/geolocation.rb +115 -0
- data/lib/googlemaps/services/global_constants.rb +40 -0
- data/lib/googlemaps/services/places.rb +5 -5
- data/lib/googlemaps/services/roads.rb +8 -7
- data/lib/googlemaps/services/staticmap.rb +5 -7
- data/lib/googlemaps/services/streetview.rb +1 -1
- data/lib/googlemaps/services/timezone.rb +1 -1
- data/lib/googlemaps/services/version.rb +1 -1
- metadata +17 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7ef65d4e04d36a5429f201972fe84cd62ec063d
|
4
|
+
data.tar.gz: c2805471af22dd29286cc3bde204a29676860f58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5fe169d40fcadc8be9ea7e3d4de6c59f9d3a85ced23e9d28252e756b6f0c7275d66fbf0536e8655a3bac8835a2a194cd23ade000236c8666e9f1f1c837278a3
|
7
|
+
data.tar.gz: 913240e8c1c994ee6fd0f1bf37a92596412ff93be5e1b0ac06e85b7244209a6445a2a0dc3ddcfc93df218dce4e047ed052f240344bf57245423d335defd6b0ff
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
require 'googlemaps/services/global_constants'
|
2
3
|
require 'googlemaps/services/exceptions'
|
3
|
-
require 'googlemaps/services/version'
|
4
4
|
require 'googlemaps/services/util'
|
5
5
|
require 'nokogiri'
|
6
6
|
require 'base64'
|
@@ -18,10 +18,6 @@ module GoogleMaps
|
|
18
18
|
|
19
19
|
# Performs requests to the Google Maps API web services.
|
20
20
|
class GoogleClient
|
21
|
-
USER_AGENT = 'GoogleMapsRubyClient/' + VERSION
|
22
|
-
DEFAULT_BASE_URL = 'https://maps.googleapis.com'
|
23
|
-
RETRIABLE_STATUSES = [500, 503, 504]
|
24
|
-
|
25
21
|
include GoogleMaps::Services::Exceptions
|
26
22
|
|
27
23
|
# @return [Symbol] API key. Required, unless "client_id" and "client_secret" are set.
|
@@ -80,7 +76,7 @@ module GoogleMaps
|
|
80
76
|
self.client_secret = client_secret
|
81
77
|
self.channel = channel
|
82
78
|
self.retry_timeout = retry_timeout
|
83
|
-
self.request_headers = request_headers.merge({ 'User-Agent' => USER_AGENT })
|
79
|
+
self.request_headers = request_headers.merge({ 'User-Agent' => Constants::USER_AGENT })
|
84
80
|
self.queries_per_second = queries_per_second
|
85
81
|
self.sent_times = Array.new
|
86
82
|
|
@@ -90,7 +86,7 @@ module GoogleMaps
|
|
90
86
|
end
|
91
87
|
end
|
92
88
|
|
93
|
-
# Performs HTTP GET requests with credentials, returning the body as JSON or XML.
|
89
|
+
# Performs HTTP GET/POST requests with credentials, returning the body as JSON or XML.
|
94
90
|
#
|
95
91
|
# @param [String] url URL path for the request. Should begin with a slash.
|
96
92
|
# @param [Hash] params HTTP GET parameters.
|
@@ -101,10 +97,11 @@ module GoogleMaps
|
|
101
97
|
# @param [Proc] extract_body A function that extracts the body from the request. If the request was not successful, the function should raise a
|
102
98
|
# GoogleMaps::Services::Exceptions::HTTPError or GoogleMaps::Services::Exceptions::APIError as appropriate.
|
103
99
|
# @param [Hash] request_headers HTTP headers per request.
|
100
|
+
# @param [Hash] post_json The request body which will be formatted as JSON.
|
104
101
|
#
|
105
102
|
# @return [Hash, Array, nil] response body (either in JSON or XML) or nil.
|
106
|
-
def
|
107
|
-
accepts_clientid: true, extract_body: nil, request_headers: nil)
|
103
|
+
def request(url:, params:, first_request_time: nil, retry_counter: nil, base_url: Constants::DEFAULT_BASE_URL,
|
104
|
+
accepts_clientid: true, extract_body: nil, request_headers: nil, post_json: nil)
|
108
105
|
first_request_time = Util.current_time unless first_request_time
|
109
106
|
|
110
107
|
elapsed = Time.now - first_request_time
|
@@ -130,14 +127,16 @@ module GoogleMaps
|
|
130
127
|
# Construct the Request URI
|
131
128
|
uri = HTTP::URI.parse(base_url + authed_url)
|
132
129
|
|
133
|
-
# Create the request, add the headers
|
134
|
-
|
135
|
-
|
136
|
-
|
130
|
+
# Create the request, add the headers & timeouts
|
131
|
+
req = HTTP.headers(request_headers)
|
132
|
+
.timeout(:write => self.write_timeout, :connect => self.connect_timeout, :read => self.read_timeout)
|
133
|
+
|
134
|
+
# Make the HTTP GET/POST request
|
135
|
+
resp = post_json ? req.post(uri.to_s, :json => post_json) : req.get(uri.to_s)
|
137
136
|
|
138
|
-
if RETRIABLE_STATUSES.include? resp.code.to_i
|
137
|
+
if Constants::RETRIABLE_STATUSES.include? resp.code.to_i
|
139
138
|
# Retry request
|
140
|
-
self.
|
139
|
+
self.request(url, params, first_request_time, retry_counter + 1, base_url, accepts_clientid, extract_body, post_json)
|
141
140
|
end
|
142
141
|
|
143
142
|
# Check if the time of the nth previous query (where n is queries_per_second)
|
@@ -169,7 +168,7 @@ module GoogleMaps
|
|
169
168
|
return result
|
170
169
|
rescue RetriableRequest
|
171
170
|
# Retry request
|
172
|
-
return self.
|
171
|
+
return self.request(url, params, first_request_time, retry_counter + 1, base_url, accepts_clientid, extract_body, post_json)
|
173
172
|
end
|
174
173
|
end
|
175
174
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'googlemaps/services/global_constants'
|
1
2
|
require 'googlemaps/services/util'
|
2
3
|
|
3
4
|
module GoogleMaps
|
@@ -8,8 +9,6 @@ module GoogleMaps
|
|
8
9
|
# directions = GoogleMaps::Services::Directions.new(client)
|
9
10
|
# result = directions.query(origin: "Brussels", destination: {:lat => 52.520645, :lng => 13.409779})
|
10
11
|
class Directions
|
11
|
-
TRAVEL_MODES = %w(driving walking bicycling transit)
|
12
|
-
AVOID_FEATURES = %w(tolls highways ferries indoor)
|
13
12
|
|
14
13
|
# @return [Symbol] The HTTP client.
|
15
14
|
attr_accessor :client
|
@@ -54,7 +53,7 @@ module GoogleMaps
|
|
54
53
|
}
|
55
54
|
|
56
55
|
if mode
|
57
|
-
unless TRAVEL_MODES.include? mode
|
56
|
+
unless Constants::TRAVEL_MODES.include? mode
|
58
57
|
raise StandardError, 'invalid travel mode.'
|
59
58
|
end
|
60
59
|
params['mode'] = mode
|
@@ -73,7 +72,7 @@ module GoogleMaps
|
|
73
72
|
end
|
74
73
|
|
75
74
|
if avoid
|
76
|
-
unless ArrayBox.contains_all?(AVOID_FEATURES, avoid)
|
75
|
+
unless ArrayBox.contains_all?(Constants::AVOID_FEATURES, avoid)
|
77
76
|
raise StandardError, 'invalid avoid feature.'
|
78
77
|
end
|
79
78
|
params['avoid'] = Convert.join_array('|', avoid)
|
@@ -117,9 +116,9 @@ module GoogleMaps
|
|
117
116
|
|
118
117
|
case self.client.response_format
|
119
118
|
when :xml
|
120
|
-
self.client.
|
119
|
+
self.client.request(url: '/maps/api/directions/xml', params: params).xpath('//route')
|
121
120
|
when :json
|
122
|
-
self.client.
|
121
|
+
self.client.request(url: '/maps/api/directions/json', params: params)['routes']
|
123
122
|
else
|
124
123
|
raise StandardError, 'Unsupported response format. Should be either :json or :xml.'
|
125
124
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'googlemaps/services/global_constants'
|
1
2
|
require 'googlemaps/services/util'
|
2
3
|
|
3
4
|
module GoogleMaps
|
@@ -8,8 +9,6 @@ module GoogleMaps
|
|
8
9
|
# distancematrix = GoogleMaps::Services::DistanceMatrix.new(client)
|
9
10
|
# result = distancematrix.query(origins: ["Brussels", "Ghent"], destinations: ["Bruges"])
|
10
11
|
class DistanceMatrix
|
11
|
-
AVOIDS = %w(tolls highways ferries)
|
12
|
-
TRAVEL_MODES = %w(driving walking bicycling transit)
|
13
12
|
|
14
13
|
# @return [Symbol] the HTTP client.
|
15
14
|
attr_accessor :client
|
@@ -46,7 +45,7 @@ module GoogleMaps
|
|
46
45
|
}
|
47
46
|
|
48
47
|
if mode
|
49
|
-
raise StandardError, 'Invalid travel mode.' unless TRAVEL_MODES.include? mode
|
48
|
+
raise StandardError, 'Invalid travel mode.' unless Constants::TRAVEL_MODES.include? mode
|
50
49
|
params['mode'] = mode
|
51
50
|
end
|
52
51
|
|
@@ -55,7 +54,7 @@ module GoogleMaps
|
|
55
54
|
end
|
56
55
|
|
57
56
|
if avoid
|
58
|
-
raise StandardError, 'Invalid route restriction.' unless
|
57
|
+
raise StandardError, 'Invalid route restriction.' unless Constants::AVOID_FEATURES.include? avoid
|
59
58
|
params['avoid'] = avoid
|
60
59
|
end
|
61
60
|
|
@@ -87,7 +86,7 @@ module GoogleMaps
|
|
87
86
|
params['traffic_model'] = traffic_model
|
88
87
|
end
|
89
88
|
|
90
|
-
self.client.
|
89
|
+
self.client.request(url: "/maps/api/distancematrix/#{self.client.response_format}", params: params)
|
91
90
|
end
|
92
91
|
end
|
93
92
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'googlemaps/services/util'
|
2
2
|
|
3
|
-
|
4
3
|
module GoogleMaps
|
5
4
|
module Services
|
6
5
|
|
@@ -52,9 +51,9 @@ module GoogleMaps
|
|
52
51
|
|
53
52
|
case self.client.response_format
|
54
53
|
when :xml
|
55
|
-
self.client.
|
54
|
+
self.client.request(url: '/maps/api/elevation/xml', params: params).xpath('//result')
|
56
55
|
when :json
|
57
|
-
self.client.
|
56
|
+
self.client.request(url: '/maps/api/elevation/json', params: params)['results']
|
58
57
|
else
|
59
58
|
raise StandardError, 'Unsupported response format. Should be either :json or :xml.'
|
60
59
|
end
|
@@ -55,9 +55,9 @@ module GoogleMaps
|
|
55
55
|
|
56
56
|
case self.client.response_format
|
57
57
|
when :xml
|
58
|
-
self.client.
|
58
|
+
self.client.request(url: '/maps/api/geocode/xml', params: params).xpath('//result')
|
59
59
|
when :json
|
60
|
-
self.client.
|
60
|
+
self.client.request(url: '/maps/api/geocode/json', params: params)['results']
|
61
61
|
else
|
62
62
|
raise StandardError, 'Unsupported response format. Should be either :json or :xml.'
|
63
63
|
end
|
@@ -107,9 +107,9 @@ module GoogleMaps
|
|
107
107
|
|
108
108
|
case self.client.response_format
|
109
109
|
when :xml
|
110
|
-
self.client.
|
110
|
+
self.client.request(url: '/maps/api/geocode/xml', params: params).xpath('//result')
|
111
111
|
when :json
|
112
|
-
self.client.
|
112
|
+
self.client.request(url: '/maps/api/geocode/json', params: params)['results']
|
113
113
|
else
|
114
114
|
raise StandardError, 'Unsupported response format. Should be either :json or :xml.'
|
115
115
|
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'googlemaps/services/global_constants'
|
2
|
+
require 'googlemaps/services/exceptions'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module GoogleMaps
|
6
|
+
module Services
|
7
|
+
|
8
|
+
# Performs requests to the Google Geolocation API.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# geolocation = GoogleMaps::Services::Geolocation.new(client)
|
12
|
+
# location = geolocation.query(home_mobile_country_code: "310",
|
13
|
+
# home_mobile_network_code: "410",
|
14
|
+
# radio_type: "gsm",
|
15
|
+
# carrier: "Vodafone",
|
16
|
+
# consider_ip: "true")
|
17
|
+
# # {"location"=>{"lat"=>51.021327, "lng"=>3.7070152}, "accuracy"=>2598.0}
|
18
|
+
class Geolocation
|
19
|
+
include GoogleMaps::Services::Exceptions
|
20
|
+
|
21
|
+
# @return [Symbol] The HTTP client.
|
22
|
+
attr_accessor :client
|
23
|
+
|
24
|
+
def initialize(client)
|
25
|
+
self.client = client
|
26
|
+
end
|
27
|
+
|
28
|
+
# The Google Maps Geolocation API returns a location and accuracy radius based on information about cell towers and given WiFi nodes.
|
29
|
+
#
|
30
|
+
# For more information, see: https://developers.google.com/maps/documentation/geolocation/intro
|
31
|
+
#
|
32
|
+
# @param [String] home_mobile_country_code The mobile country code (MCC) for the device's home network.
|
33
|
+
# @param [String] home_mobile_network_code The mobile network code (MNC) for the device's home network.
|
34
|
+
# @param [String] radio_type The mobile radio type. Supported values are lte, gsm, cdma, and wcdma.
|
35
|
+
# While this field is optional, it should be included if a value is available,
|
36
|
+
# for more accurate results.
|
37
|
+
# @param [String] carrier The carrier name.
|
38
|
+
# @param [TrueClass, FalseClass] consider_ip Specifies whether to fall back to IP geolocation if wifi and cell tower
|
39
|
+
# signals are not available. Note that the IP address in the request header
|
40
|
+
# may not be the IP of the device.
|
41
|
+
# @param [Array] cell_towers The array of cell tower hashes.
|
42
|
+
# See: https://developers.google.com/maps/documentation/geolocation/intro#cell_tower_object
|
43
|
+
# @param [Array] wifi_access_points The array of WiFi access point hashes.
|
44
|
+
# See: https://developers.google.com/maps/documentation/geolocation/intro#wifi_access_point_object
|
45
|
+
#
|
46
|
+
# @return [HashMap] The location with accuracy radius.
|
47
|
+
def query(home_mobile_country_code: nil, home_mobile_network_code: nil, radio_type: nil,
|
48
|
+
carrier: nil, consider_ip: true, cell_towers: nil, wifi_access_points: nil)
|
49
|
+
params = {}
|
50
|
+
|
51
|
+
if home_mobile_country_code
|
52
|
+
params["homeMobileCountryCode"] = home_mobile_country_code
|
53
|
+
end
|
54
|
+
|
55
|
+
if home_mobile_network_code
|
56
|
+
params["homeMobileNetworkCode"] = home_mobile_network_code
|
57
|
+
end
|
58
|
+
|
59
|
+
if radio_type
|
60
|
+
raise StandardError, "invalid radio type value." unless Constants::SUPPORTED_RADIO_TYPES.include? radio_type
|
61
|
+
params["radioType"] = radio_type
|
62
|
+
end
|
63
|
+
|
64
|
+
if carrier
|
65
|
+
params["carrier"] = carrier
|
66
|
+
end
|
67
|
+
|
68
|
+
params["considerIp"] = consider_ip unless consider_ip
|
69
|
+
|
70
|
+
|
71
|
+
if cell_towers
|
72
|
+
params["cellTowers"] = cell_towers
|
73
|
+
end
|
74
|
+
|
75
|
+
if wifi_access_points
|
76
|
+
params["wifiAccessPoints"] = wifi_access_points
|
77
|
+
end
|
78
|
+
|
79
|
+
self.client.request(url: '/geolocation/v1/geolocate',
|
80
|
+
params: {},
|
81
|
+
base_url: Constants::GOOGLEAPIS_BASE_URL,
|
82
|
+
extract_body: lambda(&method(:_geolocation_extract)),
|
83
|
+
post_json: params)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Extracts result from the Geolocation API HTTP response.
|
87
|
+
#
|
88
|
+
# @private
|
89
|
+
#
|
90
|
+
# @param [HTTP::Response] response HTTP response object.
|
91
|
+
#
|
92
|
+
# @return [Hash] The result as a Hash.
|
93
|
+
def _geolocation_extract(response)
|
94
|
+
status_code = response.code.to_i
|
95
|
+
begin
|
96
|
+
body = JSON.parse(response.body)
|
97
|
+
rescue JSON::ParserError
|
98
|
+
raise APIError.new(status_code), 'Received malformed response.'
|
99
|
+
end
|
100
|
+
|
101
|
+
if body.key?('error')
|
102
|
+
raise APIError.new(status_code), body['error']['errors'][0]['reason']
|
103
|
+
end
|
104
|
+
|
105
|
+
if status_code != 200
|
106
|
+
raise HTTPError.new(status_code)
|
107
|
+
end
|
108
|
+
body
|
109
|
+
end
|
110
|
+
|
111
|
+
private :_geolocation_extract
|
112
|
+
end
|
113
|
+
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'googlemaps/services/version'
|
3
|
+
|
4
|
+
# Global constants used across the library
|
5
|
+
#
|
6
|
+
# @since 1.3.5
|
7
|
+
module Constants
|
8
|
+
# The User-Agent header
|
9
|
+
USER_AGENT = 'GoogleMapsRubyClient/' + GoogleMaps::Services::VERSION
|
10
|
+
|
11
|
+
# The default base URL for all Google Maps requests
|
12
|
+
DEFAULT_BASE_URL = 'https://maps.googleapis.com'
|
13
|
+
|
14
|
+
# The default base URL for all Google APIs requests
|
15
|
+
GOOGLEAPIS_BASE_URL = 'https://www.googleapis.com'
|
16
|
+
|
17
|
+
# HTTP statuses that will trigger a retry request
|
18
|
+
RETRIABLE_STATUSES = [500, 503, 504]
|
19
|
+
|
20
|
+
# The supported transportation modes
|
21
|
+
TRAVEL_MODES = %w(driving walking bicycling transit)
|
22
|
+
|
23
|
+
# The features to avoid
|
24
|
+
AVOID_FEATURES = %w(tolls highways ferries indoor)
|
25
|
+
|
26
|
+
# The base URL for Roads API
|
27
|
+
ROADS_BASE_URL = 'https://roads.googleapis.com'
|
28
|
+
|
29
|
+
# The supported scale values
|
30
|
+
ALLOWED_SCALES = [2, 4]
|
31
|
+
|
32
|
+
# The supported image formats
|
33
|
+
SUPPORTED_IMG_FORMATS = ["png32", "gif", "jpg", "jpg-baseline"]
|
34
|
+
|
35
|
+
# The supported map types
|
36
|
+
SUPPORTED_MAP_TYPES = ["satellite", "hybrid", "terrain"]
|
37
|
+
|
38
|
+
# The supported mobile radio types
|
39
|
+
SUPPORTED_RADIO_TYPES = %w(lte gsm cdma wcdma)
|
40
|
+
end
|
@@ -130,7 +130,7 @@ module GoogleMaps
|
|
130
130
|
params['pagetoken'] = page_token
|
131
131
|
end
|
132
132
|
|
133
|
-
self.client.
|
133
|
+
self.client.request(url: "/maps/api/place/#{url_part}search/#{self.client.response_format}", params: params)
|
134
134
|
end
|
135
135
|
|
136
136
|
# Comprehensive details for an individual place.
|
@@ -145,7 +145,7 @@ module GoogleMaps
|
|
145
145
|
params['language'] = language
|
146
146
|
end
|
147
147
|
|
148
|
-
self.client.
|
148
|
+
self.client.request(url: "/maps/api/place/details/#{self.client.response_format}", params: params)
|
149
149
|
end
|
150
150
|
|
151
151
|
# Downloads a photo from the Places API.
|
@@ -168,7 +168,7 @@ module GoogleMaps
|
|
168
168
|
params['maxheight'] = max_height
|
169
169
|
end
|
170
170
|
|
171
|
-
self.client.
|
171
|
+
self.client.request(url: '/maps/api/place/photo', params: params)
|
172
172
|
end
|
173
173
|
|
174
174
|
# Returns Place predictions given a textual search string and optional geographic bounds.
|
@@ -233,9 +233,9 @@ module GoogleMaps
|
|
233
233
|
|
234
234
|
case self.client.response_format
|
235
235
|
when :xml
|
236
|
-
self.client.
|
236
|
+
self.client.request(url: "/maps/api/place/#{url_part}autocomplete/xml", params: params).xpath('//prediction')
|
237
237
|
when :json
|
238
|
-
self.client.
|
238
|
+
self.client.request(url: "/maps/api/place/#{url_part}autocomplete/json", params: params)['predictions']
|
239
239
|
else
|
240
240
|
raise StandardError, 'Unsupported response format. Should be either :json or :xml.'
|
241
241
|
end
|
@@ -1,10 +1,10 @@
|
|
1
|
+
require 'googlemaps/services/global_constants'
|
1
2
|
require 'googlemaps/services/exceptions'
|
2
3
|
require 'googlemaps/services/util'
|
3
4
|
require 'json'
|
4
5
|
|
5
6
|
module GoogleMaps
|
6
7
|
module Services
|
7
|
-
ROADS_BASE_URL = 'https://roads.googleapis.com'
|
8
8
|
|
9
9
|
# Performs requests to the Google Maps Roads API.
|
10
10
|
class Roads
|
@@ -34,7 +34,7 @@ module GoogleMaps
|
|
34
34
|
params['interpolate'] = 'true'
|
35
35
|
end
|
36
36
|
|
37
|
-
self.client.
|
37
|
+
self.client.request(url: '/v1/snapToRoads', params: params, base_url: Constants::ROADS_BASE_URL,
|
38
38
|
accepts_clientid: false, extract_body: lambda(&method(:_roads_extract)))['snappedPoints']
|
39
39
|
end
|
40
40
|
|
@@ -49,7 +49,7 @@ module GoogleMaps
|
|
49
49
|
|
50
50
|
params = {'placeId' => place_ids}
|
51
51
|
|
52
|
-
self.client.
|
52
|
+
self.client.request(url: '/v1/speedLimits', params: params, base_url: Constants::ROADS_BASE_URL,
|
53
53
|
accepts_clientid: false, extract_body: lambda(&method(:_roads_extract)))['speedLimits']
|
54
54
|
end
|
55
55
|
|
@@ -62,7 +62,7 @@ module GoogleMaps
|
|
62
62
|
def snapped_speed_limits(path:)
|
63
63
|
params = {'path' => Convert.piped_location(path)}
|
64
64
|
|
65
|
-
self.client.
|
65
|
+
self.client.request(url: '/v1/speedLimits', params: params, base_url: Constants::ROADS_BASE_URL,
|
66
66
|
accepts_clientid: false, extract_body: lambda(&method(:_roads_extract)))
|
67
67
|
end
|
68
68
|
|
@@ -76,15 +76,15 @@ module GoogleMaps
|
|
76
76
|
def nearest_roads(points:)
|
77
77
|
params = {'points' => Convert.piped_location(points)}
|
78
78
|
|
79
|
-
self.client.
|
79
|
+
self.client.request(url: '/v1/nearestRoads', params: params, base_url: Constants::ROADS_BASE_URL,
|
80
80
|
accepts_clientid: false, extract_body: lambda(&method(:_roads_extract)))['snappedPoints']
|
81
81
|
end
|
82
82
|
|
83
|
-
# Extracts
|
83
|
+
# Extracts result from the Roads API HTTP response.
|
84
84
|
#
|
85
85
|
# @private
|
86
86
|
#
|
87
|
-
# @param [
|
87
|
+
# @param [HTTP::Response] resp HTTP response object.
|
88
88
|
#
|
89
89
|
# @return [Hash, Array] Valid JSON response.
|
90
90
|
def _roads_extract(resp)
|
@@ -118,5 +118,6 @@ module GoogleMaps
|
|
118
118
|
|
119
119
|
private :_roads_extract
|
120
120
|
end
|
121
|
+
|
121
122
|
end
|
122
123
|
end
|
@@ -1,10 +1,8 @@
|
|
1
|
+
require 'googlemaps/services/global_constants'
|
1
2
|
require 'googlemaps/services/util'
|
2
3
|
|
3
4
|
module GoogleMaps
|
4
5
|
module Services
|
5
|
-
ALLOWED_SCALES = [2, 4]
|
6
|
-
SUPPORTED_IMG_FORMATS = ["png32", "gif", "jpg", "jpg-baseline"]
|
7
|
-
SUPPORTED_MAP_TYPES = ["satellite", "hybrid", "terrain"]
|
8
6
|
|
9
7
|
# Performs requests to the Google Static Map API.
|
10
8
|
#
|
@@ -58,17 +56,17 @@ module GoogleMaps
|
|
58
56
|
end
|
59
57
|
|
60
58
|
if scale != 1
|
61
|
-
raise StandardError, "invalid scale value." unless ALLOWED_SCALES.include? scale
|
59
|
+
raise StandardError, "invalid scale value." unless Constants::ALLOWED_SCALES.include? scale
|
62
60
|
params['scale'] = scale
|
63
61
|
end
|
64
62
|
|
65
63
|
if format != "png"
|
66
|
-
raise StandardError, "invalid image format." unless SUPPORTED_IMG_FORMATS.include? format
|
64
|
+
raise StandardError, "invalid image format." unless Constants::SUPPORTED_IMG_FORMATS.include? format
|
67
65
|
params['format'] = format
|
68
66
|
end
|
69
67
|
|
70
68
|
if maptype != "roadmap"
|
71
|
-
raise StandardError, "invalid maptype value." unless SUPPORTED_MAP_TYPES.include? maptype
|
69
|
+
raise StandardError, "invalid maptype value." unless Constants::SUPPORTED_MAP_TYPES.include? maptype
|
72
70
|
params['maptype'] = maptype
|
73
71
|
end
|
74
72
|
|
@@ -92,7 +90,7 @@ module GoogleMaps
|
|
92
90
|
params['style'] = style
|
93
91
|
end
|
94
92
|
|
95
|
-
self.client.
|
93
|
+
self.client.request(url: "/maps/api/staticmap", params: params)
|
96
94
|
end
|
97
95
|
|
98
96
|
end
|
@@ -35,7 +35,7 @@ module GoogleMaps
|
|
35
35
|
params['language'] = language
|
36
36
|
end
|
37
37
|
|
38
|
-
self.client.
|
38
|
+
self.client.request(url: "/maps/api/timezone/#{self.client.response_format}", params: params)
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
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.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Faissal Elamraoui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '1.7'
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.7.
|
22
|
+
version: 1.7.1
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,69 +29,69 @@ dependencies:
|
|
29
29
|
version: '1.7'
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 1.7.
|
32
|
+
version: 1.7.1
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: http
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '2.
|
39
|
+
version: '2.2'
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 2.1
|
42
|
+
version: 2.2.1
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '2.
|
49
|
+
version: '2.2'
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 2.1
|
52
|
+
version: 2.2.1
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: bundler
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: '1.
|
59
|
+
version: '1.14'
|
60
60
|
type: :development
|
61
61
|
prerelease: false
|
62
62
|
version_requirements: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
64
|
- - "~>"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: '1.
|
66
|
+
version: '1.14'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: rake
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
70
70
|
requirements:
|
71
71
|
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version: '
|
73
|
+
version: '12.0'
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
78
|
- - "~>"
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
80
|
+
version: '12.0'
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: rspec
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
85
|
- - "~>"
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: '3.
|
87
|
+
version: '3.5'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
92
|
- - "~>"
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: '3.
|
94
|
+
version: '3.5'
|
95
95
|
description: This library brings the Google Maps API Web Services to your Ruby/RoR
|
96
96
|
application. It supports both JSON and XML response formats.
|
97
97
|
email:
|
@@ -106,6 +106,8 @@ files:
|
|
106
106
|
- lib/googlemaps/services/elevation.rb
|
107
107
|
- lib/googlemaps/services/exceptions.rb
|
108
108
|
- lib/googlemaps/services/geocoding.rb
|
109
|
+
- lib/googlemaps/services/geolocation.rb
|
110
|
+
- lib/googlemaps/services/global_constants.rb
|
109
111
|
- lib/googlemaps/services/places.rb
|
110
112
|
- lib/googlemaps/services/roads.rb
|
111
113
|
- lib/googlemaps/services/staticmap.rb
|
@@ -133,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
133
135
|
version: '0'
|
134
136
|
requirements: []
|
135
137
|
rubyforge_project:
|
136
|
-
rubygems_version: 2.
|
138
|
+
rubygems_version: 2.6.11
|
137
139
|
signing_key:
|
138
140
|
specification_version: 4
|
139
141
|
summary: Ruby Client library for Google Maps API Web Services
|