google_places 0.0.8 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +16 -14
- data/google_places.gemspec +1 -1
- data/lib/google_places/client.rb +4 -0
- data/lib/google_places/request.rb +6 -2
- data/lib/google_places/spot.rb +48 -1
- data/spec/google_places/client_spec.rb +7 -0
- data/spec/google_places/request_spec.rb +78 -13
- data/spec/google_places/spot_spec.rb +17 -4
- metadata +5 -5
data/Gemfile.lock
CHANGED
@@ -1,26 +1,28 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
google_places (0.0.
|
4
|
+
google_places (0.0.8)
|
5
5
|
httparty
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
|
11
|
-
diff-lcs (1.1.2)
|
10
|
+
diff-lcs (1.1.3)
|
12
11
|
fakeweb (1.3.0)
|
13
|
-
httparty (0.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
rspec-
|
23
|
-
|
12
|
+
httparty (0.8.3)
|
13
|
+
multi_json (~> 1.0)
|
14
|
+
multi_xml
|
15
|
+
multi_json (1.3.6)
|
16
|
+
multi_xml (0.5.1)
|
17
|
+
rspec (2.10.0)
|
18
|
+
rspec-core (~> 2.10.0)
|
19
|
+
rspec-expectations (~> 2.10.0)
|
20
|
+
rspec-mocks (~> 2.10.0)
|
21
|
+
rspec-core (2.10.1)
|
22
|
+
rspec-expectations (2.10.0)
|
23
|
+
diff-lcs (~> 1.1.3)
|
24
|
+
rspec-mocks (2.10.1)
|
25
|
+
vcr (2.2.2)
|
24
26
|
|
25
27
|
PLATFORMS
|
26
28
|
ruby
|
data/google_places.gemspec
CHANGED
data/lib/google_places/client.rb
CHANGED
@@ -7,19 +7,23 @@ module GooglePlaces
|
|
7
7
|
|
8
8
|
SPOTS_LIST_URL = 'https://maps.googleapis.com/maps/api/place/search/json'
|
9
9
|
SPOT_URL = 'https://maps.googleapis.com/maps/api/place/details/json'
|
10
|
+
SPOTS_LIST_QUERY_URL = 'https://maps.googleapis.com/maps/api/place/textsearch/json'
|
10
11
|
|
11
12
|
def self.spots(options = {})
|
12
|
-
# pp options
|
13
13
|
request = new(SPOTS_LIST_URL, options)
|
14
14
|
request.parsed_response
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.spot(options = {})
|
18
|
-
# pp options
|
19
18
|
request = new(SPOT_URL, options)
|
20
19
|
request.parsed_response
|
21
20
|
end
|
22
21
|
|
22
|
+
def self.spots_by_query(options = {})
|
23
|
+
request = new(SPOTS_LIST_QUERY_URL, options)
|
24
|
+
request.parsed_response
|
25
|
+
end
|
26
|
+
|
23
27
|
def initialize(url, options)
|
24
28
|
retry_options = options.delete(:retry_options) || {}
|
25
29
|
|
data/lib/google_places/spot.rb
CHANGED
@@ -54,6 +54,53 @@ module GooglePlaces
|
|
54
54
|
self.new(response['result'])
|
55
55
|
end
|
56
56
|
|
57
|
+
def self.list_by_query(query, api_key, options)
|
58
|
+
if options.has_key?(:lat) && options.has_key?(:lng)
|
59
|
+
with_location = true
|
60
|
+
else
|
61
|
+
with_location = false
|
62
|
+
end
|
63
|
+
|
64
|
+
if options.has_key?(:radius)
|
65
|
+
with_radius = true
|
66
|
+
else
|
67
|
+
with_radius = false
|
68
|
+
end
|
69
|
+
|
70
|
+
query = query
|
71
|
+
sensor = options.delete(:sensor) || false
|
72
|
+
location = Location.new(options.delete(:lat), options.delete(:lng)) if with_location
|
73
|
+
radius = options.delete(:radius) if with_radius
|
74
|
+
language = options.delete(:language)
|
75
|
+
types = options.delete(:types)
|
76
|
+
exclude = options.delete(:exclude) || []
|
77
|
+
retry_options = options.delete(:retry_options) || {}
|
78
|
+
|
79
|
+
exclude = [exclude] unless exclude.is_a?(Array)
|
80
|
+
|
81
|
+
options = {
|
82
|
+
:query => query,
|
83
|
+
:sensor => sensor,
|
84
|
+
:key => api_key,
|
85
|
+
:language => language,
|
86
|
+
:retry_options => retry_options
|
87
|
+
}
|
88
|
+
|
89
|
+
options[:location] = location.format if with_location
|
90
|
+
options[:radius] = radius if with_radius
|
91
|
+
|
92
|
+
# Accept Types as a string or array
|
93
|
+
if types
|
94
|
+
types = (types.is_a?(Array) ? types.join('|') : types)
|
95
|
+
options.merge!(:types => types)
|
96
|
+
end
|
97
|
+
|
98
|
+
response = Request.spots_by_query(options)
|
99
|
+
response['results'].map do |result|
|
100
|
+
self.new(result) if (result['types'] & exclude) == []
|
101
|
+
end.compact
|
102
|
+
end
|
103
|
+
|
57
104
|
def initialize(json_result_object)
|
58
105
|
@reference = json_result_object['reference']
|
59
106
|
@vicinity = json_result_object['vicinity']
|
@@ -84,7 +131,7 @@ module GooglePlaces
|
|
84
131
|
component.first[address_component_length] unless component.first.nil?
|
85
132
|
end
|
86
133
|
end
|
87
|
-
|
134
|
+
|
88
135
|
def address_components_of_type(type)
|
89
136
|
@address_components.select{ |c| c['types'].include?(type.to_s) } unless @address_components.nil?
|
90
137
|
end
|
@@ -27,4 +27,11 @@ describe GooglePlaces::Client do
|
|
27
27
|
@client.spot(reference)
|
28
28
|
end
|
29
29
|
|
30
|
+
it 'should request spots by query' do
|
31
|
+
query = "Statue of liberty, New York"
|
32
|
+
@client = GooglePlaces::Client.new(api_key)
|
33
|
+
GooglePlaces::Spot.should_receive(:list_by_query).with(query, api_key, {})
|
34
|
+
|
35
|
+
@client.spots_by_query(query)
|
36
|
+
end
|
30
37
|
end
|
@@ -4,14 +4,14 @@ describe GooglePlaces::Request do
|
|
4
4
|
|
5
5
|
before :each do
|
6
6
|
@location = GooglePlaces::Location.new('-33.8670522', '151.1957362').format
|
7
|
+
@query = "Statue of liberty, New York"
|
7
8
|
@radius = 200
|
8
9
|
@sensor = false
|
9
|
-
@reference = "
|
10
|
+
@reference = "CnRsAAAASc4grenwL0h3X5VPNp5fkDNfqbjt3iQtWIPlKS-3ms9GbnCxR_FLHO0B0ZKCgJSg19qymkeHagjQFB4aUL87yhp4mhFTc17DopK1oiYDaeGthztSjERic8TmFNe-6zOpKSdiZWKE6xlQvcbSiWIJchIQOEYZqunSSZqNDoBSs77bWRoUJcMMVANtSlhy0llKI0MI6VcC7DU"
|
10
11
|
end
|
11
12
|
|
12
13
|
context 'Listing spots' do
|
13
14
|
use_vcr_cassette 'list_spots'
|
14
|
-
|
15
15
|
context 'with valid options' do
|
16
16
|
it 'should retrieve a list of spots' do
|
17
17
|
response = GooglePlaces::Request.spots(
|
@@ -20,11 +20,9 @@ describe GooglePlaces::Request do
|
|
20
20
|
:sensor => @sensor,
|
21
21
|
:key => api_key
|
22
22
|
)
|
23
|
-
|
24
23
|
response['results'].should_not be_empty
|
25
24
|
end
|
26
25
|
end
|
27
|
-
|
28
26
|
context 'with missing sensor' do
|
29
27
|
it do
|
30
28
|
lambda {
|
@@ -36,7 +34,6 @@ describe GooglePlaces::Request do
|
|
36
34
|
}.should raise_error GooglePlaces::RequestDeniedError
|
37
35
|
end
|
38
36
|
end
|
39
|
-
|
40
37
|
context 'without location' do
|
41
38
|
context 'without retry options' do
|
42
39
|
it do
|
@@ -49,7 +46,6 @@ describe GooglePlaces::Request do
|
|
49
46
|
}.should raise_error GooglePlaces::InvalidRequestError
|
50
47
|
end
|
51
48
|
end
|
52
|
-
|
53
49
|
context 'with retry options' do
|
54
50
|
context 'without timeout' do
|
55
51
|
it do
|
@@ -67,7 +63,6 @@ describe GooglePlaces::Request do
|
|
67
63
|
}.should raise_error GooglePlaces::RetryError
|
68
64
|
end
|
69
65
|
end
|
70
|
-
|
71
66
|
context 'with timeout' do
|
72
67
|
it do
|
73
68
|
lambda {
|
@@ -89,9 +84,84 @@ describe GooglePlaces::Request do
|
|
89
84
|
end
|
90
85
|
end
|
91
86
|
|
87
|
+
|
88
|
+
context 'Listing spots by query' do
|
89
|
+
use_vcr_cassette 'list_spots'
|
90
|
+
|
91
|
+
context 'with valid options' do
|
92
|
+
it 'should retrieve a list of spots' do
|
93
|
+
response = GooglePlaces::Request.spots_by_query(
|
94
|
+
:query => @query,
|
95
|
+
:sensor => @sensor,
|
96
|
+
:key => api_key
|
97
|
+
)
|
98
|
+
|
99
|
+
response['results'].should_not be_empty
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'with missing sensor' do
|
104
|
+
it do
|
105
|
+
lambda {
|
106
|
+
GooglePlaces::Request.spots_by_query(
|
107
|
+
:query => @query,
|
108
|
+
:key => api_key
|
109
|
+
)
|
110
|
+
}.should raise_error GooglePlaces::RequestDeniedError
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context 'without query' do
|
115
|
+
context 'without retry options' do
|
116
|
+
it do
|
117
|
+
lambda {
|
118
|
+
GooglePlaces::Request.spots_by_query(
|
119
|
+
:sensor => @sensor,
|
120
|
+
:key => api_key
|
121
|
+
)
|
122
|
+
}.should raise_error GooglePlaces::InvalidRequestError
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context 'with retry options' do
|
127
|
+
context 'without timeout' do
|
128
|
+
it do
|
129
|
+
lambda {
|
130
|
+
GooglePlaces::Request.spots_by_query(
|
131
|
+
:sensor => @sensor,
|
132
|
+
:key => api_key,
|
133
|
+
:retry_options => {
|
134
|
+
:max => 3,
|
135
|
+
:status => 'INVALID_REQUEST',
|
136
|
+
:delay => 1
|
137
|
+
}
|
138
|
+
)
|
139
|
+
}.should raise_error GooglePlaces::RetryError
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'with timeout' do
|
144
|
+
it do
|
145
|
+
lambda {
|
146
|
+
GooglePlaces::Request.spots_by_query(
|
147
|
+
:sensor => @sensor,
|
148
|
+
:key => api_key,
|
149
|
+
:retry_options => {
|
150
|
+
:max => 3,
|
151
|
+
:status => 'INVALID_REQUEST',
|
152
|
+
:delay => 10,
|
153
|
+
:timeout => 1
|
154
|
+
}
|
155
|
+
)
|
156
|
+
}.should raise_error GooglePlaces::RetryTimeoutError
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
92
163
|
context 'Spot details' do
|
93
164
|
use_vcr_cassette 'single_spot'
|
94
|
-
|
95
165
|
context 'with valid options' do
|
96
166
|
it 'should retrieve a single spot' do
|
97
167
|
response = GooglePlaces::Request.spot(
|
@@ -99,11 +169,9 @@ describe GooglePlaces::Request do
|
|
99
169
|
:sensor => @sensor,
|
100
170
|
:key => api_key
|
101
171
|
)
|
102
|
-
|
103
172
|
response['result'].should_not be_empty
|
104
173
|
end
|
105
174
|
end
|
106
|
-
|
107
175
|
context 'with missing sensor' do
|
108
176
|
it do
|
109
177
|
lambda {
|
@@ -114,7 +182,6 @@ describe GooglePlaces::Request do
|
|
114
182
|
}.should raise_error GooglePlaces::RequestDeniedError
|
115
183
|
end
|
116
184
|
end
|
117
|
-
|
118
185
|
context 'with missing reference' do
|
119
186
|
context 'without retry options' do
|
120
187
|
it do
|
@@ -126,7 +193,6 @@ describe GooglePlaces::Request do
|
|
126
193
|
}.should raise_error GooglePlaces::InvalidRequestError
|
127
194
|
end
|
128
195
|
end
|
129
|
-
|
130
196
|
context 'with retry options' do
|
131
197
|
context 'without timeout' do
|
132
198
|
it do
|
@@ -143,7 +209,6 @@ describe GooglePlaces::Request do
|
|
143
209
|
}.should raise_error GooglePlaces::RetryError
|
144
210
|
end
|
145
211
|
end
|
146
|
-
|
147
212
|
context 'with timeout' do
|
148
213
|
it do
|
149
214
|
lambda {
|
@@ -7,7 +7,7 @@ describe GooglePlaces::Spot do
|
|
7
7
|
@lng = '151.1957362'
|
8
8
|
@radius = 200
|
9
9
|
@sensor = false
|
10
|
-
@reference = "
|
10
|
+
@reference = "CnRsAAAASc4grenwL0h3X5VPNp5fkDNfqbjt3iQtWIPlKS-3ms9GbnCxR_FLHO0B0ZKCgJSg19qymkeHagjQFB4aUL87yhp4mhFTc17DopK1oiYDaeGthztSjERic8TmFNe-6zOpKSdiZWKE6xlQvcbSiWIJchIQOEYZqunSSZqNDoBSs77bWRoUJcMMVANtSlhy0llKI0MI6VcC7DU"
|
11
11
|
end
|
12
12
|
|
13
13
|
context 'List spots' do
|
@@ -116,17 +116,30 @@ describe GooglePlaces::Spot do
|
|
116
116
|
|
117
117
|
end
|
118
118
|
|
119
|
+
|
120
|
+
|
121
|
+
|
122
|
+
context 'List spots by query' do
|
123
|
+
use_vcr_cassette 'list_spots'
|
124
|
+
|
125
|
+
after(:each) do
|
126
|
+
@collection.map(&:class).uniq.should == [GooglePlaces::Spot]
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should be a collection of Spots' do
|
130
|
+
@collection = GooglePlaces::Spot.list_by_query("Statue of liberty, New York", api_key, :sensor => @sensor)
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
119
135
|
context 'Find a single spot' do
|
120
136
|
use_vcr_cassette 'single_spot'
|
121
|
-
|
122
137
|
before :each do
|
123
138
|
@spot = GooglePlaces::Spot.find(@reference, api_key, :sensor => @sensor)
|
124
139
|
end
|
125
|
-
|
126
140
|
it 'should be a Spot' do
|
127
141
|
@spot.class.should == GooglePlaces::Spot
|
128
142
|
end
|
129
|
-
|
130
143
|
%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).each do |attribute|
|
131
144
|
it "should have the attribute: #{attribute}" do
|
132
145
|
@spot.respond_to?(attribute).should == true
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_places
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.8
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Marcel de Graaf
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-01
|
18
|
+
date: 2012-07-01 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: httparty
|
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
131
|
requirements: []
|
132
132
|
|
133
133
|
rubyforge_project:
|
134
|
-
rubygems_version: 1.8.
|
134
|
+
rubygems_version: 1.8.23
|
135
135
|
signing_key:
|
136
136
|
specification_version: 3
|
137
137
|
summary: A Ruby wrapper around the Google Places API.
|