google_places 0.18.0 → 0.19.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 +9 -9
- data/Gemfile.lock +1 -1
- data/LICENSE.txt +20 -0
- data/README.rdoc +14 -0
- data/google_places.gemspec +1 -1
- data/lib/google_places.rb +13 -2
- data/lib/google_places/client.rb +3 -2
- data/lib/google_places/photo.rb +44 -0
- data/lib/google_places/request.rb +33 -4
- data/lib/google_places/spot.rb +25 -7
- data/spec/google_places.rb +27 -0
- data/spec/google_places/client_spec.rb +0 -4
- data/spec/google_places/photo_spec.rb +29 -0
- data/spec/google_places/spot_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/vcr_cassettes/photo.yml +46 -0
- metadata +11 -3
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MGY1NTVkOWNjZDRlZjlmZTNjNzE2MmZlODg3NjNhNzM2YzIxMWE3NA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
7
|
-
|
6
|
+
YzczNDA5NzE4ZjkxMDA4MWFlMTg5YmI5ZmQzY2EyZTI2MDE0MGZjMg==
|
7
|
+
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YjJjMmNmNDkzYjkwM2VmYWFkOTVlOTY0ZWRmMTVlMjc0MDE0M2JmZmIwM2Mx
|
10
|
+
Y2U5MzJiYzExNTQyNTE0MWJhOWMxY2NhMGU3MWYwM2Q5ZjhhMjM4NjU1Nzdh
|
11
|
+
MmViZDk1OTI4MTVjMmY3YmE4MTBjYjEzOThmOWU1MTk0MGFlMTQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OGFjOTExYzIxYWJlYjNkNDc0MDZkMGJjZWY2N2Q4ZGI1MGYzZWYzZTA2Mzgy
|
14
|
+
MGRmNjhiODMxNWJjNWFhMDYxNTg1MTcwNTE4MjFjMzAyMWRjYWUyY2FjMGYy
|
15
|
+
MDRlMWZjNjg3YjlkNDE0YWE3MjQzZDQwMjU2YTU4OGUxMjk2MzY=
|
data/Gemfile.lock
CHANGED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2011 - 2013, Marcel de Graaf
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
CHANGED
@@ -92,6 +92,20 @@ Then retrieve the spot:
|
|
92
92
|
|
93
93
|
@client.spot('CmRYAAA...upoTH3g')
|
94
94
|
|
95
|
+
=== Retrieving a single photo's url
|
96
|
+
|
97
|
+
First register a new Client:
|
98
|
+
|
99
|
+
@client = GooglePlaces::Client.new(API_KEY)
|
100
|
+
|
101
|
+
Then retrieve the spot:
|
102
|
+
|
103
|
+
@spot = @client.spot('CmRYAAA...upoTH3g')
|
104
|
+
|
105
|
+
Then request one of the photos url with a max width:
|
106
|
+
|
107
|
+
url = @spot.photos[0].fetch_url(800)
|
108
|
+
|
95
109
|
|
96
110
|
== Development
|
97
111
|
|
data/google_places.gemspec
CHANGED
data/lib/google_places.rb
CHANGED
@@ -1,7 +1,18 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'httparty'
|
3
3
|
|
4
|
-
|
5
|
-
%w(client location request spot error).each do |file|
|
4
|
+
%w(client location request spot error photo).each do |file|
|
6
5
|
require File.join(File.dirname(__FILE__), 'google_places', file)
|
7
6
|
end
|
7
|
+
|
8
|
+
module GooglePlaces
|
9
|
+
class << self
|
10
|
+
|
11
|
+
attr_accessor :api_key
|
12
|
+
|
13
|
+
def configuration
|
14
|
+
yield self
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
data/lib/google_places/client.rb
CHANGED
@@ -43,8 +43,9 @@ module GooglePlaces
|
|
43
43
|
#
|
44
44
|
# @see http://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&gid=1 List of supported languages
|
45
45
|
# @see https://developers.google.com/maps/documentation/places/supported_types List of supported types
|
46
|
-
|
47
|
-
|
46
|
+
|
47
|
+
def initialize(api_key = @api_key, sensor = false, options = {})
|
48
|
+
api_key ? @api_key = api_key : @api_key = GooglePlaces.api_key
|
48
49
|
@sensor = sensor
|
49
50
|
@options = options
|
50
51
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module GooglePlaces
|
2
|
+
class Photo
|
3
|
+
attr_accessor :width, :height, :photo_reference, :html_attributions
|
4
|
+
|
5
|
+
def initialize(width, height, photo_reference, html_attributions, api_key, sensor)
|
6
|
+
@width = width
|
7
|
+
@height = height
|
8
|
+
@photo_reference = photo_reference
|
9
|
+
@html_attributions = html_attributions
|
10
|
+
@api_key = api_key
|
11
|
+
@sensor = sensor
|
12
|
+
end
|
13
|
+
|
14
|
+
# Search for a Photo's url with its reference key
|
15
|
+
#
|
16
|
+
# @return [URL]
|
17
|
+
# @param [String] api_key the provided api key
|
18
|
+
# @param [Boolean] sensor
|
19
|
+
# Indicates whether or not the Place request came from a device using a location sensor (e.g. a GPS)
|
20
|
+
# to determine the location sent in this request.
|
21
|
+
# <b>Note that this is a mandatory parameter</b>
|
22
|
+
# @param [Hash] options
|
23
|
+
# @option options [Hash] :retry_options ({})
|
24
|
+
# A Hash containing parameters for search retries
|
25
|
+
# @option options [Object] :retry_options[:status] ([])
|
26
|
+
# @option options [Integer] :retry_options[:max] (0) the maximum retries
|
27
|
+
# @option options [Integer] :retry_options[:delay] (5) the delay between each retry in seconds
|
28
|
+
def fetch_url(maxwidth, options = {})
|
29
|
+
language = options.delete(:language)
|
30
|
+
retry_options = options.delete(:retry_options) || {}
|
31
|
+
|
32
|
+
unless @fetched_url
|
33
|
+
@fetched_url = Request.photo_url(
|
34
|
+
:maxwidth => maxwidth,
|
35
|
+
:photoreference => @photo_reference,
|
36
|
+
:sensor => @sensor,
|
37
|
+
:key => @api_key,
|
38
|
+
:retry_options => retry_options
|
39
|
+
)
|
40
|
+
end
|
41
|
+
@fetched_url
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -10,6 +10,7 @@ module GooglePlaces
|
|
10
10
|
|
11
11
|
NEARBY_SEARCH_URL = 'https://maps.googleapis.com/maps/api/place/nearbysearch/json'
|
12
12
|
DETAILS_URL = 'https://maps.googleapis.com/maps/api/place/details/json'
|
13
|
+
PHOTO_URL = 'https://maps.googleapis.com/maps/api/place/photo'
|
13
14
|
TEXT_SEARCH_URL = 'https://maps.googleapis.com/maps/api/place/textsearch/json'
|
14
15
|
PAGETOKEN_URL = 'https://maps.googleapis.com/maps/api/place/search/json'
|
15
16
|
|
@@ -142,6 +143,33 @@ module GooglePlaces
|
|
142
143
|
request.parsed_response
|
143
144
|
end
|
144
145
|
|
146
|
+
# Search for a Photo's URL with a reference key
|
147
|
+
#
|
148
|
+
# @return [URL]
|
149
|
+
# @param [Hash] options
|
150
|
+
# @option options [String] :key
|
151
|
+
# the provided api key.
|
152
|
+
# <b>Note that this is a mandatory parameter</b>
|
153
|
+
# @option options [Integer] :maxwidth
|
154
|
+
# The maximum width of the photo url to be returned
|
155
|
+
# <b>Note that this is a mandatory parameter</b>
|
156
|
+
# @option options [String] :photoreference
|
157
|
+
# The reference of a already retrieved Photo
|
158
|
+
# <b>Note that this is a mandatory parameter</b>
|
159
|
+
# @option options [Boolean] :sensor
|
160
|
+
# Indicates whether or not the Place request came from a device using a location sensor (e.g. a GPS) to determine the location sent in this request.
|
161
|
+
# <b>Note that this is a mandatory parameter</b>
|
162
|
+
#
|
163
|
+
# @option options [Hash] :retry_options ({})
|
164
|
+
# A Hash containing parameters for search retries
|
165
|
+
# @option options [Object] :retry_options[:status] ([])
|
166
|
+
# @option options [Integer] :retry_options[:max] (0) the maximum retries
|
167
|
+
# @option options [Integer] :retry_options[:delay] (5) the delay between each retry in seconds
|
168
|
+
def self.photo_url(options = {})
|
169
|
+
request = new(PHOTO_URL, options, false)
|
170
|
+
request.parsed_response
|
171
|
+
end
|
172
|
+
|
145
173
|
# Create a new Request for a given uri and the provided params
|
146
174
|
#
|
147
175
|
# @return [Request]
|
@@ -183,7 +211,7 @@ module GooglePlaces
|
|
183
211
|
#
|
184
212
|
# @see http://spreadsheets.google.com/pub?key=p9pdwsai2hDMsLkXsoM05KQ&gid=1 List of supported languages
|
185
213
|
# @see https://developers.google.com/maps/documentation/places/supported_types List of supported types
|
186
|
-
def initialize(url, options)
|
214
|
+
def initialize(url, options, follow_redirects = true)
|
187
215
|
retry_options = options.delete(:retry_options) || {}
|
188
216
|
|
189
217
|
retry_options[:status] ||= []
|
@@ -191,8 +219,8 @@ module GooglePlaces
|
|
191
219
|
retry_options[:delay] ||= 5
|
192
220
|
|
193
221
|
retry_options[:status] = [retry_options[:status]] unless retry_options[:status].is_a?(Array)
|
222
|
+
@response = self.class.get(url, :query => options, :follow_redirects => follow_redirects)
|
194
223
|
|
195
|
-
@response = self.class.get(url, :query => options)
|
196
224
|
# puts "@response.request.last_uri.to_s"
|
197
225
|
# puts @response.request.last_uri.to_s
|
198
226
|
|
@@ -202,7 +230,7 @@ module GooglePlaces
|
|
202
230
|
for i in (1..retry_options[:max])
|
203
231
|
sleep(retry_options[:delay])
|
204
232
|
|
205
|
-
@response = self.class.get(url, :query => options)
|
233
|
+
@response = self.class.get(url, :query => options, :follow_redirects => follow_redirects)
|
206
234
|
|
207
235
|
break unless retry_options[:status].include?(@response.parsed_response['status'])
|
208
236
|
end
|
@@ -224,7 +252,7 @@ module GooglePlaces
|
|
224
252
|
end
|
225
253
|
|
226
254
|
def execute
|
227
|
-
@response = self.class.get(url, :query => options)
|
255
|
+
@response = self.class.get(url, :query => options, :follow_redirects => follow_redirects)
|
228
256
|
end
|
229
257
|
|
230
258
|
# Parse errors from the server respons, if any
|
@@ -235,6 +263,7 @@ module GooglePlaces
|
|
235
263
|
# @raise [NotFoundError] when server response object includes 'NOT_FOUND'
|
236
264
|
# @return [String] the response from the server as JSON
|
237
265
|
def parsed_response
|
266
|
+
return @response.headers["location"] if @response.code >= 300 and @response.code < 400
|
238
267
|
case @response.parsed_response['status']
|
239
268
|
when 'OK', 'ZERO_RESULTS'
|
240
269
|
@response.parsed_response
|
data/lib/google_places/spot.rb
CHANGED
@@ -2,7 +2,7 @@ require 'google_places/review'
|
|
2
2
|
|
3
3
|
module GooglePlaces
|
4
4
|
class Spot
|
5
|
-
attr_accessor :lat, :lng, :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
|
5
|
+
attr_accessor :lat, :lng, :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
|
6
6
|
|
7
7
|
# Search for Spots at the provided location
|
8
8
|
#
|
@@ -119,7 +119,7 @@ module GooglePlaces
|
|
119
119
|
:retry_options => retry_options
|
120
120
|
)
|
121
121
|
|
122
|
-
self.new(response['result'])
|
122
|
+
self.new(response['result'], api_key, sensor)
|
123
123
|
end
|
124
124
|
|
125
125
|
# Search for Spots with a pagetoken
|
@@ -239,7 +239,7 @@ module GooglePlaces
|
|
239
239
|
# Some places returned by Google do not have a 'types' property. If the user specified 'types', then
|
240
240
|
# this is a non-issue because those places will not be returned. However, if the user did not specify
|
241
241
|
# 'types', then we do not want to filter out places with a missing 'types' property from the results set.
|
242
|
-
results << self.new(result) if result['types'].nil? || (result['types'] & exclude) == []
|
242
|
+
results << self.new(result, options[:key], options[:sensor]) if result['types'].nil? || (result['types'] & exclude) == []
|
243
243
|
end
|
244
244
|
|
245
245
|
results
|
@@ -278,7 +278,7 @@ module GooglePlaces
|
|
278
278
|
|
279
279
|
# @param [JSON] json_result_object a JSON object to create a Spot from
|
280
280
|
# @return [Spot] a newly created spot
|
281
|
-
def initialize(json_result_object)
|
281
|
+
def initialize(json_result_object, api_key, sensor)
|
282
282
|
@reference = json_result_object['reference']
|
283
283
|
@vicinity = json_result_object['vicinity']
|
284
284
|
@lat = json_result_object['geometry']['location']['lat']
|
@@ -307,9 +307,11 @@ module GooglePlaces
|
|
307
307
|
@zagat_selected = json_result_object['zagat_selected']
|
308
308
|
@aspects = aspects_component(json_result_object['aspects'])
|
309
309
|
@review_summary = json_result_object['review_summary']
|
310
|
-
@photos = photos_component(json_result_object['photos'])
|
310
|
+
@photos = photos_component(json_result_object['photos'], api_key, sensor)
|
311
311
|
@reviews = reviews_component(json_result_object['reviews'])
|
312
312
|
@nextpagetoken = json_result_object['nextpagetoken']
|
313
|
+
@events = events_component(json_result_object['events'])
|
314
|
+
@utc_offset = json_result_object['utc_offset']
|
313
315
|
end
|
314
316
|
|
315
317
|
def [] (key)
|
@@ -346,8 +348,24 @@ module GooglePlaces
|
|
346
348
|
json_aspects.to_a.map{ |r| { :type => r['type'], :rating => r['rating'] } }
|
347
349
|
end
|
348
350
|
|
349
|
-
def photos_component(json_photos)
|
350
|
-
json_photos
|
351
|
+
def photos_component(json_photos, api_key, sensor)
|
352
|
+
if json_photos
|
353
|
+
json_photos.map{ |p|
|
354
|
+
Photo.new(
|
355
|
+
p['width'],
|
356
|
+
p['height'],
|
357
|
+
p['photo_reference'],
|
358
|
+
p['html_attributions'],
|
359
|
+
api_key,
|
360
|
+
sensor
|
361
|
+
)
|
362
|
+
}
|
363
|
+
else []
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def events_component(json_events)
|
368
|
+
json_events.to_a.map{ |r| {:event_id => r['event_id'], :summary => r['summary'], :url => r['url'], :start_time => r['start_time']} }
|
351
369
|
end
|
352
370
|
end
|
353
371
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GooglePlaces do
|
4
|
+
it "should be able to initialize client without any params" do
|
5
|
+
client = GooglePlaces::Client.new
|
6
|
+
client.api_key.should == nil
|
7
|
+
end
|
8
|
+
|
9
|
+
shared_examples "config api_key" do
|
10
|
+
it "should be able to config api_key" do
|
11
|
+
GooglePlaces.configuration do |config|
|
12
|
+
config.api_key = '456'
|
13
|
+
end
|
14
|
+
client = GooglePlaces::Client.new
|
15
|
+
client.api_key.should == '456'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
include_examples "config api_key" do
|
20
|
+
it "should be able to config api_key and being overwrite" do
|
21
|
+
client = GooglePlaces::Client.new
|
22
|
+
client.api_key.should_not == nil
|
23
|
+
client = GooglePlaces::Client.new '123'
|
24
|
+
client.api_key.should == '123'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -2,10 +2,6 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe GooglePlaces::Client do
|
4
4
|
|
5
|
-
it 'should not initialize without an api_key' do
|
6
|
-
lambda { GooglePlaces::Client.new }.should raise_error
|
7
|
-
end
|
8
|
-
|
9
5
|
it 'should initialize with an api_key' do
|
10
6
|
@client = GooglePlaces::Client.new(api_key)
|
11
7
|
@client.api_key.should == api_key
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe GooglePlaces::Photo do
|
4
|
+
|
5
|
+
before :each do
|
6
|
+
@max_width = 400
|
7
|
+
@sensor = false
|
8
|
+
@photo_reference = "CnRtAAAACQQXR83Jc3Pffxt1Zx7QbCe6AfY2negSNzkk2IeSf0q5nxHgartLzkr1fltSlkEDSS-EZqswWAW2eQDbiOl12J-V4Rmn_JNko9e9gSnMwxHBdmScu_84NMSe-0RwB9BM6AEqE8sENXQ8cpWaiEsC_RIQLzIJxpRdoqSPrPtrjTrOhxoUWb8uwObkV4duXfKIiNB20gfnu88"
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'Photo' do
|
12
|
+
use_vcr_cassette 'photo'
|
13
|
+
before :each do
|
14
|
+
@photo = GooglePlaces::Photo.new(400, 400, @photo_reference, [], api_key, @sensor)
|
15
|
+
end
|
16
|
+
it 'should be a Photo' do
|
17
|
+
@photo.class.should == GooglePlaces::Photo
|
18
|
+
end
|
19
|
+
%w(width height photo_reference html_attributions).each do |attribute|
|
20
|
+
it "should have the attribute: #{attribute}" do
|
21
|
+
@photo.respond_to?(attribute).should == true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
it 'should return a url when fetched' do
|
25
|
+
url = @photo.fetch_url(@max_width)
|
26
|
+
url.should_not be_empty
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -190,7 +190,7 @@ describe GooglePlaces::Spot do
|
|
190
190
|
it 'should be a Spot' do
|
191
191
|
@spot.class.should == GooglePlaces::Spot
|
192
192
|
end
|
193
|
-
%w(reference vicinity lat lng name icon types id formatted_phone_number international_phone_number formatted_address address_components street_number street city region postal_code country rating url types website price_level opening_hours).each do |attribute|
|
193
|
+
%w(reference vicinity lat lng name icon types id formatted_phone_number international_phone_number formatted_address address_components street_number street city region postal_code country rating url types website price_level opening_hours events utc_offset).each do |attribute|
|
194
194
|
it "should have the attribute: #{attribute}" do
|
195
195
|
@spot.respond_to?(attribute).should == true
|
196
196
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://maps.googleapis.com/maps/api/place/photo?maxwidth=400&photoreference=CnRtAAAACQQXR83Jc3Pffxt1Zx7QbCe6AfY2negSNzkk2IeSf0q5nxHgartLzkr1fltSlkEDSS-EZqswWAW2eQDbiOl12J-V4Rmn_JNko9e9gSnMwxHBdmScu_84NMSe-0RwB9BM6AEqE8sENXQ8cpWaiEsC_RIQLzIJxpRdoqSPrPtrjTrOhxoUWb8uwObkV4duXfKIiNB20gfnu88&sensor=false&key=AIzaSyATGBjcfrRXQtNEMMyt8Fw7tSGEY8PQwv0
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 302
|
13
|
+
message: Found
|
14
|
+
headers:
|
15
|
+
date:
|
16
|
+
- Fri, 18 Oct 2013 10:27:29 GMT
|
17
|
+
pragma:
|
18
|
+
- no-cache
|
19
|
+
expires:
|
20
|
+
- Fri, 01 Jan 1990 00:00:00 GMT
|
21
|
+
cache-control:
|
22
|
+
- no-cache, must-revalidate
|
23
|
+
location:
|
24
|
+
- https://lh4.googleusercontent.com/-1wzlVdxiW14/USSFZnhNqxI/AAAAAAAABGw/YpdANqaoGh4/s1600-w400/Google%2BSydney
|
25
|
+
content-type:
|
26
|
+
- text/html; charset=UTF-8
|
27
|
+
server:
|
28
|
+
- mafe
|
29
|
+
content-length:
|
30
|
+
- '306'
|
31
|
+
x-xss-protection:
|
32
|
+
- 1; mode=block
|
33
|
+
x-frame-options:
|
34
|
+
- SAMEORIGIN
|
35
|
+
alternate-protocol:
|
36
|
+
- 443:quic
|
37
|
+
connection:
|
38
|
+
- close
|
39
|
+
body:
|
40
|
+
encoding: US-ASCII
|
41
|
+
string: ! "<HTML><HEAD><meta http-equiv=\"content-type\" content=\"text/html;charset=utf-8\">\n<TITLE>302
|
42
|
+
Moved</TITLE></HEAD><BODY>\n<H1>302 Moved</H1>\nThe document has moved\n<A
|
43
|
+
HREF=\"https://lh4.googleusercontent.com/-1wzlVdxiW14/USSFZnhNqxI/AAAAAAAABGw/YpdANqaoGh4/s1600-w400/Google%2BSydney\">here</A>.\r\n</BODY></HTML>\r\n"
|
44
|
+
http_version: '1.1'
|
45
|
+
recorded_at: Fri, 18 Oct 2013 10:27:29 GMT
|
46
|
+
recorded_with: VCR 2.2.5
|
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.19.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: 2013-
|
11
|
+
date: 2013-10-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -78,6 +78,7 @@ files:
|
|
78
78
|
- .travis.yml
|
79
79
|
- Gemfile
|
80
80
|
- Gemfile.lock
|
81
|
+
- LICENSE.txt
|
81
82
|
- README.rdoc
|
82
83
|
- Rakefile
|
83
84
|
- google_places.gemspec
|
@@ -85,13 +86,16 @@ files:
|
|
85
86
|
- lib/google_places/client.rb
|
86
87
|
- lib/google_places/error.rb
|
87
88
|
- lib/google_places/location.rb
|
89
|
+
- lib/google_places/photo.rb
|
88
90
|
- lib/google_places/request.rb
|
89
91
|
- lib/google_places/review.rb
|
90
92
|
- lib/google_places/spot.rb
|
91
93
|
- spec/api_key.sample.rb
|
92
94
|
- spec/api_key.travis.rb
|
95
|
+
- spec/google_places.rb
|
93
96
|
- spec/google_places/client_spec.rb
|
94
97
|
- spec/google_places/location_spec.rb
|
98
|
+
- spec/google_places/photo_spec.rb
|
95
99
|
- spec/google_places/request_spec.rb
|
96
100
|
- spec/google_places/spot_spec.rb
|
97
101
|
- spec/spec_helper.rb
|
@@ -102,6 +106,7 @@ files:
|
|
102
106
|
- spec/vcr_cassettes/list_spots_with_single_type.yml
|
103
107
|
- spec/vcr_cassettes/list_spots_with_types_and_exclusion.yml
|
104
108
|
- spec/vcr_cassettes/multiple_page_request.yml
|
109
|
+
- spec/vcr_cassettes/photo.yml
|
105
110
|
- spec/vcr_cassettes/premium_list_spots_with_data.yml
|
106
111
|
- spec/vcr_cassettes/single_spot.yml
|
107
112
|
- spec/vcr_setup.rb
|
@@ -125,15 +130,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
125
130
|
version: '0'
|
126
131
|
requirements: []
|
127
132
|
rubyforge_project:
|
128
|
-
rubygems_version: 2.
|
133
|
+
rubygems_version: 2.1.3
|
129
134
|
signing_key:
|
130
135
|
specification_version: 4
|
131
136
|
summary: A Ruby wrapper around the Google Places API.
|
132
137
|
test_files:
|
133
138
|
- spec/api_key.sample.rb
|
134
139
|
- spec/api_key.travis.rb
|
140
|
+
- spec/google_places.rb
|
135
141
|
- spec/google_places/client_spec.rb
|
136
142
|
- spec/google_places/location_spec.rb
|
143
|
+
- spec/google_places/photo_spec.rb
|
137
144
|
- spec/google_places/request_spec.rb
|
138
145
|
- spec/google_places/spot_spec.rb
|
139
146
|
- spec/spec_helper.rb
|
@@ -144,6 +151,7 @@ test_files:
|
|
144
151
|
- spec/vcr_cassettes/list_spots_with_single_type.yml
|
145
152
|
- spec/vcr_cassettes/list_spots_with_types_and_exclusion.yml
|
146
153
|
- spec/vcr_cassettes/multiple_page_request.yml
|
154
|
+
- spec/vcr_cassettes/photo.yml
|
147
155
|
- spec/vcr_cassettes/premium_list_spots_with_data.yml
|
148
156
|
- spec/vcr_cassettes/single_spot.yml
|
149
157
|
- spec/vcr_setup.rb
|