google_maps_service_ruby 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25cb368b535afc02deeda844ba39c3129173217bc66ecaaa0f62d06fa20c1914
4
- data.tar.gz: b31f5a94a276b608df9f3e24eaecccd0cf21436f3f4a8361d42058a588531318
3
+ metadata.gz: 71fd1ea5543cf0c41c68763e4ffaa218573e4965105a7973613bffcb94b9dcd2
4
+ data.tar.gz: a2eb9d2b1bb9368d0914798f49b8b5d27645ad0a056e7e62fd10fc6abcca83d3
5
5
  SHA512:
6
- metadata.gz: 175a5f27bf2c23e6d9958eda7b686a3be90a53d29e90fbf1d6fe54bc790c6266f8caa6a0c7b7319a6ea32f442b8b4a21ac66b785ec71b8f8ab32753c3db62eec
7
- data.tar.gz: dee6fc2abdd6ffa26bed8c4ef20374962b0a539f12faa4b00b33cc3843055f3cabf50ced8f13472201e936a11e9cf0f7980eedc402d78152c3cc01f6cb298eb1
6
+ metadata.gz: 77a992d6ca82095447e3fb75bcb8e194ae627cc97b0c20c8e2cb6f0cfa575a08bf63a078242e6f91ef1396592f93cfa89a8c4086220d8016826a8634383c2284
7
+ data.tar.gz: 28ad069318403640c4f7a15fd7e752dc7c6102bee54fe2432370059d620555ab78358961fb0e3dade88195391f79e28bc4e1953b4e4e0f0b1c9aa9fec4204020
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.6.3 - 2023-06-04
6
+
7
+ * Add Places API place, places, places_nearby and places_photo support
8
+
5
9
  ## 0.6.2 - 2023-03-18
6
10
 
7
11
  * Add support for ruby 3.2
data/README.md CHANGED
@@ -16,6 +16,7 @@ The Ruby gem for Google Maps Web Service APIs is a gem for the following Google
16
16
  - [Google Maps Distance Matrix API][Distance Matrix API]
17
17
  - [Google Maps Elevation API][Elevation API]
18
18
  - [Google Maps Geocoding API][Geocoding API]
19
+ - [Google Maps Places API][Places API]
19
20
  - [Google Maps Time Zone API][Time Zone API]
20
21
  - [Google Maps Roads API][Roads API]
21
22
 
@@ -45,6 +46,20 @@ Note: Currently, [Roads API] does not accept client ID. It requires API key to a
45
46
 
46
47
  This gem return a Ruby Hash/Array object as the API result. The result format structure is same as in Google Maps API documentation.
47
48
 
49
+ ## Contributing
50
+
51
+ If you find a bug please [log an issue][issues].
52
+
53
+ The goal of this gem is to follow the API and implementation of the [python client](https://github.com/googlemaps/google-maps-services-python) as much as possible. If you would like to add support for an API please consider porting the python implementation.
54
+
55
+ To create a new pull request:
56
+
57
+ 1. Fork it (https://github.com/langsharpe/google-maps-services-ruby/fork).
58
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
59
+ 3. Commit your changes (`git commit -am 'Add some feature'`).
60
+ 4. Push to the branch (`git push origin my-new-feature`).
61
+ 5. Create a new Pull Request.
62
+
48
63
  ## Requirements
49
64
 
50
65
  - Ruby 2.7 or later.
@@ -141,7 +156,7 @@ end
141
156
  gmaps = GoogleMapsService::Client.new
142
157
  ```
143
158
 
144
- For more examples and detail (setup **proxy**, **timeout**, **caching**, etc.) while initializing the client, check out [Client documentation](http://www.rubydoc.info/gems/google_maps_service/GoogleMapsService/Apis/Client#initialize-instance_method).
159
+ For more examples and detail (setup **proxy**, **timeout**, **caching**, etc.) while initializing the client, check out [Client documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/Client#initialize-instance_method).
145
160
 
146
161
  ### Latitude/longitude pairs format
147
162
 
@@ -237,7 +252,7 @@ Sample result:
237
252
  }]
238
253
  ```
239
254
 
240
- For more usage examples and result format, check out [gem documentation](http://www.rubydoc.info/gems/google_maps_service/GoogleMapsService/Apis/Directions), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/directions_spec.rb), and [Google Maps Directions API documentation][Directions API].
255
+ For more usage examples and result format, check out [gem documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/Directions), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/directions_spec.rb), and [Google Maps Directions API documentation][Directions API].
241
256
 
242
257
  ### Distance Matrix API
243
258
 
@@ -252,7 +267,7 @@ matrix = gmaps.distance_matrix(origins, destinations,
252
267
  units: 'imperial')
253
268
  ```
254
269
 
255
- For more usage examples and result format, check out [gem documentation](http://www.rubydoc.info/gems/google_maps_service/GoogleMapsService/Apis/DistanceMatrix), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/distance_matrix_spec.rb), and [Google Maps Distance Matrix API documentation][Distance Matrix API].
270
+ For more usage examples and result format, check out [gem documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/DistanceMatrix), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/distance_matrix_spec.rb), and [Google Maps Distance Matrix API documentation][Distance Matrix API].
256
271
 
257
272
  ### Elevation API
258
273
 
@@ -266,7 +281,7 @@ locations = [[40.714728, -73.998672], [-34.397, 150.644]]
266
281
  results = gmaps.elevation_along_path(locations, 5)
267
282
  ```
268
283
 
269
- For more usage examples and result format, check out [gem documentation](http://www.rubydoc.info/gems/google_maps_service/GoogleMapsService/Apis/Elevation), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/elevation_spec.rb), and [Google Maps Elevation API documentation][Elevation API].
284
+ For more usage examples and result format, check out [gem documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/Elevation), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/elevation_spec.rb), and [Google Maps Elevation API documentation][Elevation API].
270
285
 
271
286
  ### Geocoding API
272
287
 
@@ -278,7 +293,27 @@ results = gmaps.geocode('1600 Amphitheatre Parkway, Mountain View, CA')
278
293
  results = gmaps.reverse_geocode([40.714224, -73.961452])
279
294
  ```
280
295
 
281
- For more usage examples and result format, check out [gem documentation](http://www.rubydoc.info/gems/google_maps_service/GoogleMapsService/Apis/Geocoding), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/geocoding_spec.rb), and [Google Maps Geocoding API documentation][Geocoding API].
296
+ For more usage examples and result format, check out [gem documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/Geocoding), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/geocoding_spec.rb), and [Google Maps Geocoding API documentation][Geocoding API].
297
+
298
+ ### Places API
299
+
300
+ ```ruby
301
+ # Search for places
302
+ results = gmaps.places(
303
+ 'Pizza Restaurant',
304
+ location: {:lat=>37.4221114, :lng=>-122.0867443},
305
+ )
306
+
307
+ # Search for places nearby
308
+ results = gmaps.places_nearby(
309
+ location: {:lat=>37.4221114, :lng=>-122.0867443},
310
+ radius: 5000,
311
+ )
312
+
313
+ # Get the url for a photo returned by the places api
314
+ url = gmaps.places_photo(photo_reference, max_width: 400, max_height: 400)
315
+ ```
316
+ For more usage examples and result format, check out [gem documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/Places), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/places_spec.rb), and [Google Maps Places API documentation][Places API].
282
317
 
283
318
  ### Roads API
284
319
 
@@ -309,7 +344,7 @@ place_ids = [
309
344
  results = gmaps.speed_limits(place_ids)
310
345
  ```
311
346
 
312
- For more usage examples and result format, check out [gem documentation](http://www.rubydoc.info/gems/google_maps_service/GoogleMapsService/Apis/Roads), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/roads_spec.rb), and [Google Maps Roads API documentation][Roads API].
347
+ For more usage examples and result format, check out [gem documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/Roads), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/roads_spec.rb), and [Google Maps Roads API documentation][Roads API].
313
348
 
314
349
  ### Time Zone API
315
350
 
@@ -321,7 +356,7 @@ timezone = gmaps.timezone([39.603481, -119.682251])
321
356
  timezone = gmaps.timezone([39.603481, -119.682251], timestamp: Time.at(1608))
322
357
  ```
323
358
 
324
- For more usage examples and result format, check out [gem documentation](http://www.rubydoc.info/gems/google_maps_service/GoogleMapsService/Apis/TimeZone), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/time_zone_spec.rb), and [Google Maps Time Zone API documentation][Time Zone API].
359
+ For more usage examples and result format, check out [gem documentation](https://www.rubydoc.info/gems/google_maps_service_ruby/GoogleMapsService/Apis/TimeZone), [test script](https://github.com/langsharpe/google-maps-services-ruby/tree/master/spec/google_maps_service/apis/time_zone_spec.rb), and [Google Maps Time Zone API documentation][Time Zone API].
325
360
 
326
361
  ### Polyline encoder/decoder
327
362
 
@@ -346,19 +381,6 @@ encoded_path = GoogleMapsService::Polyline.encode(path)
346
381
  #=> "_p~iF~ps|U_ulLnnqC_mqNvxq`@"
347
382
  ```
348
383
 
349
- ## Issues and feature suggestions
350
-
351
- If you find a bug, or have a feature suggestion, please [log an issue][issues]. If you'd like to
352
- contribute, please read [How to Contribute](#contributing).
353
-
354
- ## Contributing
355
-
356
- 1. Fork it (https://github.com/langsharpe/google-maps-services-ruby/fork).
357
- 2. Create your feature branch (`git checkout -b my-new-feature`).
358
- 3. Commit your changes (`git commit -am 'Add some feature'`).
359
- 4. Push to the branch (`git push origin my-new-feature`).
360
- 5. Create a new Pull Request.
361
-
362
384
  [apikey]: https://developers.google.com/maps/faq#keysystem
363
385
  [clientid]: https://developers.google.com/maps/documentation/business/webservices/auth
364
386
 
@@ -367,6 +389,7 @@ contribute, please read [How to Contribute](#contributing).
367
389
  [Distance Matrix API]: https://developers.google.com/maps/documentation/distancematrix/
368
390
  [Elevation API]: https://developers.google.com/maps/documentation/elevation/
369
391
  [Geocoding API]: https://developers.google.com/maps/documentation/geocoding/
392
+ [Places API]: https://developers.google.com/maps/documentation/places/
370
393
  [Time Zone API]: https://developers.google.com/maps/documentation/timezone/
371
394
  [Roads API]: https://developers.google.com/maps/documentation/roads/
372
395
 
@@ -0,0 +1,153 @@
1
+ require_relative "../validator"
2
+
3
+ module GoogleMapsService::Apis
4
+ # Performs requests to the Google Maps Places API.
5
+ module Places
6
+ # Places search.
7
+ #
8
+ # @param [String] query The text string on which to search, for example: "restaurant".
9
+ # @param [String, Hash, Array] location The latitude/longitude value for which you wish to obtain the
10
+ # closest, human-readable address.
11
+ # @param [Integer] radius Distance in meters within which to bias results.
12
+ # @param [String] language The language in which to return results.
13
+ # @param [Integer] min_price Restricts results to only those places with no less than
14
+ # this price level. Valid values are in the range from 0 (most affordable)
15
+ # to 4 (most expensive).
16
+ # @param [Integer] max_price Restricts results to only those places with no greater
17
+ # than this price level. Valid values are in the range from 0 (most
18
+ # affordable) to 4 (most expensive).
19
+ # @param [Boolean] open_now Return only those places that are open for business at
20
+ # the time the query is sent.
21
+ # @param [String] type Restricts the results to places matching the specified type.
22
+ # The full list of supported types is available here:
23
+ # https://developers.google.com/places/supported_types
24
+ # @param [String] page_token Token from a previous search that when provided will
25
+ # returns the next page of results for the same search.
26
+ # @return [Hash] Hash with the following keys:
27
+ # results: list of places
28
+ # html_attributions: set of attributions which must be displayed
29
+ # next_page_token: token for retrieving the next page of results
30
+ def places(query, location: nil, radius: nil, language: nil, min_price: nil,
31
+ max_price: nil, open_now: false, type: nil, page_token: nil)
32
+
33
+ _places("text", query: query, location: location, radius: radius,
34
+ language: language, min_price: min_price, max_price: max_price,
35
+ open_now: open_now, type: type, page_token: page_token)
36
+ end
37
+
38
+ # Performs nearby search for places.
39
+ #
40
+ # @param [String, Hash, Array] location The latitude/longitude value for
41
+ # which you wish to obtain the closest, human-readable address.
42
+ # @param [Integer] radius Distance in meters within which to bias results.
43
+ # @param [String] keyword A term to be matched against all content that
44
+ # Google has indexed for this place.
45
+ # @param [String] language The language in which to return results.
46
+ # @param [Integer] min_price Restricts results to only those places with no
47
+ # less than this price level. Valid values are in the range from 0
48
+ # (most affordable) to 4 (most expensive).
49
+ # @param [Integer] max_price Restricts results to only those places with no
50
+ # greater than this price level. Valid values are in the range
51
+ # from 0 (most affordable) to 4 (most expensive).
52
+ # @param [String, Array] name One or more terms to be matched against the
53
+ # names of places.
54
+ # @param [Boolean] open_now Return only those places that are open for
55
+ # business at the time the query is sent.
56
+ # @param [String] rank_by Specifies the order in which results are listed.
57
+ # Possible values are: prominence (default), distance
58
+ # @param [String] type Restricts the results to places matching the
59
+ # specified type. The full list of supported types is available
60
+ # here: https://developers.google.com/places/supported_types
61
+ # @param [String] page_token Token from a previous search that when provided
62
+ # will returns the next page of results for the same search.
63
+ # @return [Hash] Hash with the following keys:
64
+ # status: status code
65
+ # results: list of places
66
+ # html_attributions: set of attributions which must be displayed
67
+ # next_page_token: token for retrieving the next page of results
68
+ def places_nearby(location: nil, radius: nil, keyword: nil, language: nil,
69
+ min_price: nil, max_price: nil, name: nil, open_now: false,
70
+ rank_by: nil, type: nil, page_token: nil)
71
+ if rank_by == "distance"
72
+ if !(keyword || name || type)
73
+ raise ArgumentError, "either a keyword, name, or type arg is " \
74
+ "required when rank_by is set to distance"
75
+ elsif radius
76
+ raise ArgumentError, "radius cannot be specified when rank_by " \
77
+ "is set to distance"
78
+ end
79
+ end
80
+
81
+ _places("nearby", location: location, radius: radius,
82
+ keyword: keyword, language: language, min_price: min_price,
83
+ max_price: max_price, name: name, open_now: open_now,
84
+ rank_by: rank_by, type: type, page_token: page_token)
85
+ end
86
+
87
+ # Comprehensive details for an individual place.
88
+ #
89
+ # @param[String] place_id A textual identifier that uniquely identifies a
90
+ # place, returned from a Places search.
91
+ # @param[String] language The language in which to return results.
92
+ # @return[Hash] Hash with the following keys:
93
+ # result: dict containing place details
94
+ # html_attributions: set of attributions which must be displayed
95
+ def place(place_id, language: nil)
96
+ params = {placeid: place_id}
97
+ params[:language] = language if language
98
+ get("/maps/api/place/details/json", params)
99
+ end
100
+
101
+ # Photo URL from the Places API.
102
+ #
103
+ # @param[String] photo_reference A string identifier that uniquely
104
+ # identifies a photo, as provided by either a Places search or Places
105
+ # detail request.
106
+ # @param[Integer] max_width Specifies the maximum desired width, in pixels.
107
+ # @param[Integer] max_height Specifies the maximum desired height, in pixels.
108
+ # @return[String] String URL of the photo or nil upon error.
109
+ def places_photo(photo_reference, max_width: nil, max_height: nil)
110
+ unless max_width || max_height
111
+ raise ArgumentError, "a max_width or max_height arg is required"
112
+ end
113
+
114
+ params = {photoreference: photo_reference}
115
+
116
+ params[:maxwidth] = max_width if max_width
117
+ params[:maxheight] = max_height if max_height
118
+
119
+ image_response_decoder = ->(response) {
120
+ response["location"]
121
+ }
122
+
123
+ get("/maps/api/place/photo", params,
124
+ custom_response_decoder: image_response_decoder)
125
+ end
126
+
127
+ private
128
+
129
+ # Internal handler for ``places``, ``places_nearby``, and ``places_radar``.
130
+ # See each method's docs for arg details.
131
+ def _places(url_part,
132
+ query: nil, location: nil, radius: nil, keyword: nil, language: nil,
133
+ min_price: 0, max_price: 4, name: nil, open_now: nil,
134
+ rank_by: nil, type: nil, page_token: nil)
135
+
136
+ params = {}
137
+ params[:query] = query if query
138
+ params[:minprice] = min_price if min_price
139
+ params[:maxprice] = max_price if max_price
140
+ params[:location] = GoogleMapsService::Convert.latlng(location) if location
141
+ params[:radius] = radius if radius
142
+ params[:keyword] = keyword if keyword
143
+ params[:language] = language if language
144
+ params[:name] = GoogleMapsService::Convert.join_list(" ", name) if name
145
+ params[:opennow] = "true" if open_now
146
+ params[:rankby] = rank_by if rank_by
147
+ params[:type] = type if type
148
+ params[:pagetoken] = page_token if page_token
149
+
150
+ get("/maps/api/place/%ssearch/json" % url_part, params)
151
+ end
152
+ end
153
+ end
@@ -8,6 +8,7 @@ require "google_maps_service/apis/directions"
8
8
  require "google_maps_service/apis/distance_matrix"
9
9
  require "google_maps_service/apis/elevation"
10
10
  require "google_maps_service/apis/geocoding"
11
+ require "google_maps_service/apis/places"
11
12
  require "google_maps_service/apis/roads"
12
13
  require "google_maps_service/apis/time_zone"
13
14
 
@@ -25,6 +26,7 @@ module GoogleMapsService
25
26
  include GoogleMapsService::Apis::DistanceMatrix
26
27
  include GoogleMapsService::Apis::Elevation
27
28
  include GoogleMapsService::Apis::Geocoding
29
+ include GoogleMapsService::Apis::Places
28
30
  include GoogleMapsService::Apis::Roads
29
31
  include GoogleMapsService::Apis::TimeZone
30
32
 
@@ -1,6 +1,6 @@
1
1
  module GoogleMapsService
2
2
  # GoogleMapsService gem version
3
- VERSION = "0.6.2"
3
+ VERSION = "0.6.3"
4
4
 
5
5
  # Current operating system
6
6
  # @private
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google_maps_service_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lang Sharpe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-18 00:00:00.000000000 Z
11
+ date: 2023-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -151,7 +151,7 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.9.28
153
153
  description: Google Maps API Client, including the Directions API, Distance Matrix
154
- API and Geocoding API. google_maps_service_ruby is a fork of google_maps_service,
154
+ API, Geocoding API and Places API. google_maps_service_ruby is a fork of google_maps_service,
155
155
  which is a fork of google-maps-services-python.
156
156
  email:
157
157
  - langer8191@gmail.com
@@ -169,6 +169,7 @@ files:
169
169
  - lib/google_maps_service/apis/distance_matrix.rb
170
170
  - lib/google_maps_service/apis/elevation.rb
171
171
  - lib/google_maps_service/apis/geocoding.rb
172
+ - lib/google_maps_service/apis/places.rb
172
173
  - lib/google_maps_service/apis/roads.rb
173
174
  - lib/google_maps_service/apis/time_zone.rb
174
175
  - lib/google_maps_service/client.rb