google_places 0.29.0 → 0.30.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/Gemfile.lock +1 -1
- data/google_places.gemspec +1 -1
- data/lib/google_places.rb +1 -1
- data/lib/google_places/client.rb +36 -1
- data/lib/google_places/rectangle.rb +13 -0
- data/lib/google_places/request.rb +35 -1
- data/lib/google_places/spot.rb +67 -1
- data/spec/google_places/client_spec.rb +8 -1
- data/spec/google_places/rectangle.rb +7 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 38654649db0478793fd7abe3c0b80f2ab7c25f46
|
4
|
+
data.tar.gz: 4871aa13e63e37b8b8a393939af98ddfe9a99871
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 15fb60f01e7d74b0e38eda355810377d401b44e080fbf2861fb1899e68f82b6b0f5218dae63d18d97332c6a40363be84aca46aab1c083737067c00a46158a8c4
|
7
|
+
data.tar.gz: 0d6e1fd84dcb5db00e31ff38813da5599f75708394d68896cea88d529f93656fc6a91070f7d51618bec020c9b92e386c672d3645a708907e1b532c120eda782a
|
data/Gemfile.lock
CHANGED
data/google_places.gemspec
CHANGED
data/lib/google_places.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'httparty'
|
3
3
|
|
4
|
-
%w(client location prediction request spot error photo).each do |file|
|
4
|
+
%w(client location rectangle prediction request spot error photo).each do |file|
|
5
5
|
require File.join(File.dirname(__FILE__), 'google_places', file)
|
6
6
|
end
|
7
7
|
|
data/lib/google_places/client.rb
CHANGED
@@ -148,7 +148,42 @@ module GooglePlaces
|
|
148
148
|
def spots_by_query(query, options = {})
|
149
149
|
Spot.list_by_query(query, @api_key, @options.merge(options))
|
150
150
|
end
|
151
|
-
|
151
|
+
# Search for Spots within a give SW|NE bounds with query
|
152
|
+
#
|
153
|
+
# @return [Array<Spot>]
|
154
|
+
# @param [Hash] bounds
|
155
|
+
# @param [String] api_key the provided api key
|
156
|
+
# @param [Hash] options
|
157
|
+
# @option bounds [String, Array] :start_point
|
158
|
+
# An array that contains the lat/lng pair for the first
|
159
|
+
# point in the bounds (rectangle)
|
160
|
+
# @option bounds [:start_point][String, Integer] :lat
|
161
|
+
# The starting point coordinates latitude value
|
162
|
+
# @option bounds [:start_point][String, Integer] :lng
|
163
|
+
# The starting point coordinates longitude value
|
164
|
+
# @option bounds [String, Array] :end_point
|
165
|
+
# An array that contains the lat/lng pair for the end
|
166
|
+
# point in the bounds (rectangle)
|
167
|
+
# @option bounds [:end_point][String, Integer] :lat
|
168
|
+
# The end point coordinates latitude value
|
169
|
+
# @option bounds [:end_point][String, Integer] :lng
|
170
|
+
# The end point coordinates longitude value
|
171
|
+
# @option options [String,Array] :query
|
172
|
+
# Restricts the results to Spots matching term(s) in the specified query
|
173
|
+
# @option options [String] :language
|
174
|
+
# The language code, indicating in which language the results should be returned, if possible.
|
175
|
+
# @option options [String,Array<String>] :exclude ([])
|
176
|
+
# A String or an Array of <b>types</b> to exclude from results
|
177
|
+
# @option options [Hash] :retry_options ({})
|
178
|
+
# A Hash containing parameters for search retries
|
179
|
+
# @option options [Object] :retry_options[:status] ([])
|
180
|
+
# @option options [Integer] :retry_options[:max] (0) the maximum retries
|
181
|
+
# @option options [Integer] :retry_options[:delay] (5) the delay between each retry in seconds
|
182
|
+
#
|
183
|
+
# @see https://developers.google.com/maps/documentation/places/supported_types List of supported types
|
184
|
+
def spots_by_bounds(bounds, options = {})
|
185
|
+
Spot.list_by_bounds(bounds, @api_key, @options.merge(options))
|
186
|
+
end
|
152
187
|
# Search for Spots with a pagetoken
|
153
188
|
#
|
154
189
|
# @return [Array<Spot>]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GooglePlaces
|
2
|
+
class Rectangle
|
3
|
+
#The start_lat/lng pair values indicate the starting point of the rectangle
|
4
|
+
#The end_lat/lng pair values indicate the end point of the rectangle
|
5
|
+
def initialize(start_lat, start_lng, end_lat, end_lng)
|
6
|
+
@start_point, @end_point = [ ("%.8f"%start_lat), ("%.8f"%start_lng)], [("%.8f"%end_lat), ("%.8f"%end_lng) ]
|
7
|
+
end
|
8
|
+
|
9
|
+
def format
|
10
|
+
[ @start_point.join(','), @end_point.join(',') ].join('|')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -127,6 +127,41 @@ module GooglePlaces
|
|
127
127
|
request.parsed_response
|
128
128
|
end
|
129
129
|
|
130
|
+
# Search for Spots within a give SW|NE bounds with query
|
131
|
+
#
|
132
|
+
# @return [Array<Spot>]
|
133
|
+
# @param [Hash] bounds
|
134
|
+
# @param [String] api_key the provided api key
|
135
|
+
# @param [Hash] options
|
136
|
+
# @option bounds [String, Integer] :se
|
137
|
+
# the southeast lat|lng pair
|
138
|
+
# @option bounds [:se][String, Integer] :lat
|
139
|
+
# the SE latitude
|
140
|
+
# @option bounds [:se][String, Integer] :lng
|
141
|
+
# the SE longitude
|
142
|
+
# @option bounds [:se][String, Integer] :lat
|
143
|
+
# the SE latitude
|
144
|
+
# @option bounds [:se][String, Integer] :lng
|
145
|
+
# the SE longitude
|
146
|
+
# @option options [String,Array] :query
|
147
|
+
# Restricts the results to Spots matching term(s) in the specified query
|
148
|
+
# @option options [String] :language
|
149
|
+
# The language code, indicating in which language the results should be returned, if possible.
|
150
|
+
# @option options [String,Array<String>] :exclude ([])
|
151
|
+
# A String or an Array of <b>types</b> to exclude from results
|
152
|
+
#
|
153
|
+
# @option options [Hash] :retry_options ({})
|
154
|
+
# A Hash containing parameters for search retries
|
155
|
+
# @option options [Object] :retry_options[:status] ([])
|
156
|
+
# @option options [Integer] :retry_options[:max] (0) the maximum retries
|
157
|
+
# @option options [Integer] :retry_options[:delay] (5) the delay between each retry in seconds
|
158
|
+
#
|
159
|
+
# @see http://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&gid=1 List of supported languages
|
160
|
+
# @see https://developers.google.com/maps/documentation/places/supported_types List of supported types
|
161
|
+
def self.spots_by_bounds(options = {})
|
162
|
+
request = new(TEXT_SEARCH_URL, options)
|
163
|
+
request.parsed_response
|
164
|
+
end
|
130
165
|
# Search for Spots with a query
|
131
166
|
#
|
132
167
|
# @return [Array<Spot>]
|
@@ -268,7 +303,6 @@ module GooglePlaces
|
|
268
303
|
retry_options[:status] ||= []
|
269
304
|
retry_options[:max] ||= 0
|
270
305
|
retry_options[:delay] ||= 5
|
271
|
-
|
272
306
|
retry_options[:status] = [retry_options[:status]] unless retry_options[:status].is_a?(Array)
|
273
307
|
@response = self.class.get(url, :query => options, :follow_redirects => follow_redirects)
|
274
308
|
|
data/lib/google_places/spot.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'google_places/review'
|
2
|
-
|
3
2
|
module GooglePlaces
|
4
3
|
class Spot
|
5
4
|
attr_accessor :lat, :lng, :viewport, :name, :icon, :reference, :vicinity, :types, :id, :formatted_phone_number, :international_phone_number, :formatted_address, :address_components, :street_number, :street, :city, :region, :postal_code, :country, :rating, :url, :cid, :website, :reviews, :aspects, :zagat_selected, :zagat_reviewed, :photos, :review_summary, :nextpagetoken, :price_level, :opening_hours, :events, :utc_offset, :place_id
|
@@ -82,7 +81,74 @@ module GooglePlaces
|
|
82
81
|
|
83
82
|
request(:spots, multipage_request, exclude, options)
|
84
83
|
end
|
84
|
+
# Search for Spots within a give SW|NE bounds with query
|
85
|
+
#
|
86
|
+
# @return [Array<Spot>]
|
87
|
+
# @param [Hash] bounds
|
88
|
+
# @param [String] api_key the provided api key
|
89
|
+
# @param [Hash] options
|
90
|
+
# @option bounds [String, Array] :start_point
|
91
|
+
# An array that contains the lat/lng pair for the first
|
92
|
+
# point in the bounds (rectangle)
|
93
|
+
# @option bounds [:start_point][String, Integer] :lat
|
94
|
+
# The starting point coordinates latitude value
|
95
|
+
# @option bounds [:start_point][String, Integer] :lng
|
96
|
+
# The starting point coordinates longitude value
|
97
|
+
# @option bounds [String, Array] :end_point
|
98
|
+
# An array that contains the lat/lng pair for the end
|
99
|
+
# point in the bounds (rectangle)
|
100
|
+
# @option bounds [:end_point][String, Integer] :lat
|
101
|
+
# The end point coordinates latitude value
|
102
|
+
# @option bounds [:end_point][String, Integer] :lng
|
103
|
+
# The end point coordinates longitude value
|
104
|
+
# @option options [String,Array] :query
|
105
|
+
# Restricts the results to Spots matching term(s) in the specified query
|
106
|
+
# @option options [String] :language
|
107
|
+
# The language code, indicating in which language the results should be returned, if possible.
|
108
|
+
# @option options [String,Array<String>] :exclude ([])
|
109
|
+
# A String or an Array of <b>types</b> to exclude from results
|
110
|
+
#
|
111
|
+
# @option options [Hash] :retry_options ({})
|
112
|
+
# A Hash containing parameters for search retries
|
113
|
+
# @option options [Object] :retry_options[:status] ([])
|
114
|
+
# @option options [Integer] :retry_options[:max] (0) the maximum retries
|
115
|
+
# @option options [Integer] :retry_options[:delay] (5) the delay between each retry in seconds
|
116
|
+
#
|
117
|
+
# @see https://developers.google.com/maps/documentation/places/supported_types List of supported types
|
118
|
+
def self.list_by_bounds(bounds, api_key, options = {})
|
119
|
+
start_lat = bounds[:start_point][:lat]
|
120
|
+
start_lng = bounds[:start_point][:lng]
|
121
|
+
end_lat = bounds[:end_point][:lat]
|
122
|
+
end_lng = bounds[:end_point][:lng]
|
123
|
+
rect = Rectangle.new(start_lat, start_lng, end_lat, end_lng)
|
124
|
+
multipage_request = !!options.delete(:multipage)
|
125
|
+
rankby = options.delete(:rankby)
|
126
|
+
query = options.delete(:query)
|
127
|
+
name = options.delete(:name)
|
128
|
+
language = options.delete(:language)
|
129
|
+
exclude = options.delete(:exclude) || []
|
130
|
+
retry_options = options.delete(:retry_options) || {}
|
131
|
+
zagat_selected = options.delete(:zagat_selected) || false
|
132
|
+
exclude = [exclude] unless exclude.is_a?(Array)
|
133
|
+
|
134
|
+
|
135
|
+
options = {
|
136
|
+
:bounds => rect.format,
|
137
|
+
:key => api_key,
|
138
|
+
:language => language,
|
139
|
+
:retry_options => retry_options
|
140
|
+
}
|
85
141
|
|
142
|
+
options[:zagatselected] = zagat_selected if zagat_selected
|
143
|
+
|
144
|
+
# Accept Types as a string or array
|
145
|
+
if query
|
146
|
+
query = (query.is_a?(Array) ? query.join('|') : query)
|
147
|
+
options.merge!(:query => query)
|
148
|
+
end
|
149
|
+
|
150
|
+
request(:spots_by_bounds, multipage_request, exclude, options)
|
151
|
+
end
|
86
152
|
# Search for Spots using Radar Search. Spots will only include reference and lat/lng information. You can send a Place Details request for more information about any of them.
|
87
153
|
#
|
88
154
|
# @return [Array<Spot>]
|
@@ -29,7 +29,14 @@ describe GooglePlaces::Client do
|
|
29
29
|
|
30
30
|
@client.spots_by_query(query)
|
31
31
|
end
|
32
|
-
|
32
|
+
it 'should request spots by bounds' do
|
33
|
+
query = 'pizza'
|
34
|
+
bounds = {:start_point => {:lat => '36.06686213257888', :lng => '-86.94168090820312'},
|
35
|
+
:end_point => {:lat => '36.268635800737876', :lng => '-86.66152954101562'}}
|
36
|
+
@client = GooglePlaces::Client.new(api_key)
|
37
|
+
expect(GooglePlaces::Spot).to receive(:list_by_bounds).with(bounds, api_key, {:query => query})
|
38
|
+
res = @client.spots_by_bounds(bounds, :query => query)
|
39
|
+
end
|
33
40
|
it 'should request spots by radar' do
|
34
41
|
keywords = 'landmarks'
|
35
42
|
lat, lng = '51.511627', '-0.183778'
|
@@ -0,0 +1,7 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GooglePlaces::Rectangle do
|
4
|
+
it 'should return two lat/lng pairs separated by a "|" based on SW and NE lat/lng bounds' do
|
5
|
+
expect(GooglePlaces::Rectangle.new('123', '456', '321', '654').format).to eq('123.00000000,456.00000000|321.00000000,654.00000000')
|
6
|
+
end
|
7
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_places
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.30.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcel de Graaf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -88,6 +88,7 @@ files:
|
|
88
88
|
- lib/google_places/location.rb
|
89
89
|
- lib/google_places/photo.rb
|
90
90
|
- lib/google_places/prediction.rb
|
91
|
+
- lib/google_places/rectangle.rb
|
91
92
|
- lib/google_places/request.rb
|
92
93
|
- lib/google_places/review.rb
|
93
94
|
- lib/google_places/spot.rb
|
@@ -98,6 +99,7 @@ files:
|
|
98
99
|
- spec/google_places/location_spec.rb
|
99
100
|
- spec/google_places/photo_spec.rb
|
100
101
|
- spec/google_places/prediction_spec.rb
|
102
|
+
- spec/google_places/rectangle.rb
|
101
103
|
- spec/google_places/request_spec.rb
|
102
104
|
- spec/google_places/spot_spec.rb
|
103
105
|
- spec/spec_helper.rb
|
@@ -148,6 +150,7 @@ test_files:
|
|
148
150
|
- spec/google_places/location_spec.rb
|
149
151
|
- spec/google_places/photo_spec.rb
|
150
152
|
- spec/google_places/prediction_spec.rb
|
153
|
+
- spec/google_places/rectangle.rb
|
151
154
|
- spec/google_places/request_spec.rb
|
152
155
|
- spec/google_places/spot_spec.rb
|
153
156
|
- spec/spec_helper.rb
|