google-maps 2.2.0 → 3.0.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/.rubocop.yml +20 -0
- data/.travis.yml +6 -1
- data/Gemfile +3 -1
- data/{LICENSE.mkd → LICENSE.md} +0 -0
- data/README.md +216 -0
- data/Rakefile +5 -3
- data/google-maps.gemspec +24 -21
- data/lib/google_maps.rb +48 -0
- data/lib/google_maps/api.rb +104 -0
- data/lib/google_maps/configuration.rb +90 -0
- data/lib/google_maps/location.rb +34 -0
- data/lib/{google-maps → google_maps}/logger.rb +5 -4
- data/lib/{google-maps → google_maps}/place.rb +21 -18
- data/lib/google_maps/result.rb +11 -0
- data/lib/google_maps/route.rb +45 -0
- data/lib/google_maps/version.rb +7 -0
- data/spec/google_maps/api_spec.rb +82 -0
- data/spec/google_maps/logger_spec.rb +17 -0
- data/spec/google_maps/place_details_spec.rb +40 -0
- data/spec/google_maps/place_spec.rb +47 -0
- data/spec/google_maps/route_spec.rb +53 -0
- data/spec/google_maps_spec.rb +174 -0
- data/spec/spec_helper.rb +5 -6
- metadata +97 -57
- data/README.mkd +0 -39
- data/lib/google-maps.rb +0 -44
- data/lib/google-maps/api.rb +0 -89
- data/lib/google-maps/configuration.rb +0 -70
- data/lib/google-maps/location.rb +0 -25
- data/lib/google-maps/route.rb +0 -38
- data/lib/google-maps/version.rb +0 -5
- data/spec/google-maps/api_spec.rb +0 -103
- data/spec/google-maps/logger_spec.rb +0 -15
- data/spec/google-maps/place_details_spec.rb +0 -32
- data/spec/google-maps/place_spec.rb +0 -45
- data/spec/google-maps/route_spec.rb +0 -52
- data/spec/google-maps_spec.rb +0 -103
data/README.mkd
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
[](http://badge.fury.io/rb/google-maps)
|
2
|
-
[](https://travis-ci.org/zilverline/google-maps)
|
3
|
-
[](https://coveralls.io/r/zilverline/google-maps?branch=master)
|
4
|
-
[](https://codeclimate.com/repos/55671579695680044d01e0ac/feed)
|
5
|
-
|
6
|
-
Google Maps
|
7
|
-
====================
|
8
|
-
|
9
|
-
Installation
|
10
|
-
------------
|
11
|
-
gem install google-maps
|
12
|
-
|
13
|
-
Usage Examples
|
14
|
-
--------------
|
15
|
-
Google::Maps.distance("Science Park, Amsterdam", "Deventer")
|
16
|
-
#=> "104 km"
|
17
|
-
Google::Maps.duration("Science Park, Amsterdam", "Deventer")
|
18
|
-
#=> "1 hour 12 mins"
|
19
|
-
|
20
|
-
route = Google::Maps.route("Science Park, Amsterdam", "Deventer")
|
21
|
-
route.distance.text
|
22
|
-
#=> "104 km"
|
23
|
-
route.duration.text
|
24
|
-
#=> "1 hour 12 mins"
|
25
|
-
route.distance.value
|
26
|
-
#=> 103712
|
27
|
-
route.duration.value
|
28
|
-
#=> 4337
|
29
|
-
|
30
|
-
Testing
|
31
|
-
-------
|
32
|
-
Run all tests:
|
33
|
-
|
34
|
-
rspec spec/
|
35
|
-
|
36
|
-
Copyright
|
37
|
-
---------
|
38
|
-
Copyright (c) 2011-2014 Zilverline / Daniël van Hoesel.
|
39
|
-
See [LICENSE](https://github.com/zilverline/google-maps/blob/master/LICENSE.mkd) for details.
|
data/lib/google-maps.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require File.expand_path('../google-maps/configuration', __FILE__)
|
2
|
-
require File.expand_path('../google-maps/logger', __FILE__)
|
3
|
-
require File.expand_path('../google-maps/route', __FILE__)
|
4
|
-
require File.expand_path('../google-maps/place', __FILE__)
|
5
|
-
require File.expand_path('../google-maps/location', __FILE__)
|
6
|
-
|
7
|
-
module Google
|
8
|
-
module Maps
|
9
|
-
extend Configuration
|
10
|
-
extend Logger
|
11
|
-
|
12
|
-
def self.route(from, to, options={})
|
13
|
-
Route.new(from, to, options_with_defaults(options))
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.distance(from, to, options={})
|
17
|
-
Route.new(from, to, options_with_defaults(options)).distance.text
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.duration(from, to, options={})
|
21
|
-
Route.new(from, to, options_with_defaults(options)).duration.text
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.places(keyword, language = self.default_language)
|
25
|
-
Place.find(keyword, language)
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.place(place_id, language = self.default_language)
|
29
|
-
PlaceDetails.find(place_id, language)
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.geocode(address, language = self.default_language)
|
33
|
-
Location.find(address, language)
|
34
|
-
rescue ZeroResultsException
|
35
|
-
[]
|
36
|
-
end
|
37
|
-
|
38
|
-
protected
|
39
|
-
|
40
|
-
def self.options_with_defaults(options)
|
41
|
-
{language: self.default_language}.merge(options)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
data/lib/google-maps/api.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
# require 'net/http'
|
2
|
-
require 'httpclient'
|
3
|
-
require 'uri'
|
4
|
-
require 'json'
|
5
|
-
require 'hashie/mash'
|
6
|
-
require 'base64'
|
7
|
-
require 'hmac'
|
8
|
-
require 'hmac-sha1'
|
9
|
-
|
10
|
-
module Google
|
11
|
-
module Maps
|
12
|
-
|
13
|
-
class InvalidResponseException < StandardError; end
|
14
|
-
class InvalidPremierConfigurationException < StandardError; end
|
15
|
-
class ZeroResultsException < InvalidResponseException; end
|
16
|
-
|
17
|
-
class API
|
18
|
-
|
19
|
-
STATUS_OK = "OK".freeze
|
20
|
-
STATUS_ZERO_RESULTS = "ZERO_RESULTS".freeze
|
21
|
-
|
22
|
-
class << self
|
23
|
-
def query(service, args = {})
|
24
|
-
default_args = {sensor: false, use_premier_signing: !Google::Maps.premier_client_id.nil?}
|
25
|
-
args = default_args.merge(args)
|
26
|
-
args = args.merge(Google::Maps.default_params[service]) if Google::Maps.default_params[service]
|
27
|
-
use_premier_signing = args.delete :use_premier_signing
|
28
|
-
args[:client] = Google::Maps.premier_client_id if use_premier_signing
|
29
|
-
|
30
|
-
url = url(service, args)
|
31
|
-
url = premier_signing(url) if use_premier_signing
|
32
|
-
result = Hashie::Mash.new response(url)
|
33
|
-
raise ZeroResultsException.new("Google did not return any results: #{result.status}") if result.status == STATUS_ZERO_RESULTS
|
34
|
-
raise InvalidResponseException.new("Google returned an error status: #{result.status}") if result.status != STATUS_OK
|
35
|
-
result
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def decode_url_safe_base_64(value)
|
41
|
-
Base64.decode64(value.tr('-_','+/'))
|
42
|
-
end
|
43
|
-
|
44
|
-
def encode_url_safe_base_64(value)
|
45
|
-
Base64.encode64(value).tr('+/','-_')
|
46
|
-
end
|
47
|
-
|
48
|
-
def premier_signing(url)
|
49
|
-
raise InvalidPremierConfigurationException.new("No private key set, set Google::Maps.premier_key") if Google::Maps.premier_key.nil?
|
50
|
-
|
51
|
-
parsed_url = url.is_a?(URI) ? url : URI.parse(url)
|
52
|
-
url_to_sign = parsed_url.path + '?' + parsed_url.query
|
53
|
-
|
54
|
-
# Decode the private key
|
55
|
-
raw_key = decode_url_safe_base_64(Google::Maps.premier_key)
|
56
|
-
|
57
|
-
# create a signature using the private key and the URL
|
58
|
-
sha1 = HMAC::SHA1.new(raw_key)
|
59
|
-
sha1 << url_to_sign
|
60
|
-
raw_sig = sha1.digest
|
61
|
-
|
62
|
-
# encode the signature into base64 for url use form.
|
63
|
-
signature = encode_url_safe_base_64(raw_sig)
|
64
|
-
|
65
|
-
# prepend the server and append the signature.
|
66
|
-
"#{parsed_url.scheme}://#{parsed_url.host}#{url_to_sign}&signature=#{signature}".strip
|
67
|
-
end
|
68
|
-
|
69
|
-
def response(url)
|
70
|
-
JSON.parse(HTTPClient.new.get_content(url))
|
71
|
-
rescue Exception => error
|
72
|
-
Google::Maps.logger.error "#{error.message}"
|
73
|
-
raise InvalidResponseException.new("unknown error: #{error.message}")
|
74
|
-
end
|
75
|
-
|
76
|
-
def url(service, args = {})
|
77
|
-
url = URI.parse("#{Google::Maps.end_point}#{Google::Maps.send(service)}/#{Google::Maps.format}#{query_string(args)}")
|
78
|
-
Google::Maps.logger.debug("url before possible signing: #{url}")
|
79
|
-
url.to_s
|
80
|
-
end
|
81
|
-
|
82
|
-
def query_string(args = {})
|
83
|
-
'?' + args.map { |k,v| "%s=%s" % [URI.encode(k.to_s), URI.encode(v.to_s)] }.join('&') unless args.size <= 0
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
module Google
|
2
|
-
module Maps
|
3
|
-
# Defines constants and methods related to configuration
|
4
|
-
module Configuration
|
5
|
-
# An array of valid keys in the options hash when configuring an {Google::Maps::API}
|
6
|
-
VALID_OPTIONS_KEYS = [:end_point, :premier_key, :premier_client_id, :format, :directions_service, :places_service, :geocode_service, :api_key, :default_language, :place_details_service, :default_params].freeze
|
7
|
-
|
8
|
-
# By default, set "https://maps.googleapis.com/maps/api/" as the server
|
9
|
-
DEFAULT_END_POINT = "https://maps.googleapis.com/maps/api/".freeze
|
10
|
-
|
11
|
-
DEFAULT_DIRECTIONS_SERVICE = "directions".freeze
|
12
|
-
DEFAULT_PLACES_SERVICE = "place/autocomplete".freeze
|
13
|
-
DEFAULT_PLACE_DETAILS_SERVICE = "place/details".freeze
|
14
|
-
DEFAULT_GEOCODE_SERVICE = "geocode".freeze
|
15
|
-
|
16
|
-
DEFAULT_FORMAT = "json".freeze
|
17
|
-
|
18
|
-
# premier API key to sign parameters
|
19
|
-
DEFAULT_PREMIER_KEY = nil
|
20
|
-
|
21
|
-
# premier client id
|
22
|
-
DEFAULT_PREMIER_CLIENT_ID = nil
|
23
|
-
|
24
|
-
# a api key
|
25
|
-
DEFAULT_API_KEY = nil
|
26
|
-
|
27
|
-
# default language
|
28
|
-
DEFAULT_LANGUAGE = :en
|
29
|
-
|
30
|
-
# params to send which each request configured per service, ie.: {places_service: {location: "52.0910,5.1220", radius: 300000}}
|
31
|
-
DEFAULT_PARAMS = {}
|
32
|
-
|
33
|
-
# @private
|
34
|
-
attr_accessor *VALID_OPTIONS_KEYS
|
35
|
-
|
36
|
-
# When this module is extended, set all configuration options to their default values
|
37
|
-
def self.extended(base)
|
38
|
-
base.reset
|
39
|
-
end
|
40
|
-
|
41
|
-
# Convenience method to allow configuration options to be set in a block
|
42
|
-
def configure
|
43
|
-
yield self
|
44
|
-
end
|
45
|
-
|
46
|
-
# Create a hash of options and their values
|
47
|
-
def options
|
48
|
-
VALID_OPTIONS_KEYS.inject({}) do |option, key|
|
49
|
-
option.merge!(key => send(key))
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# Reset all configuration options to defaults
|
54
|
-
def reset
|
55
|
-
self.end_point = DEFAULT_END_POINT
|
56
|
-
self.format = DEFAULT_FORMAT
|
57
|
-
self.directions_service = DEFAULT_DIRECTIONS_SERVICE
|
58
|
-
self.places_service = DEFAULT_PLACES_SERVICE
|
59
|
-
self.place_details_service = DEFAULT_PLACE_DETAILS_SERVICE
|
60
|
-
self.geocode_service = DEFAULT_GEOCODE_SERVICE
|
61
|
-
self.premier_client_id = DEFAULT_PREMIER_CLIENT_ID
|
62
|
-
self.premier_key = DEFAULT_PREMIER_KEY
|
63
|
-
self.api_key = DEFAULT_API_KEY
|
64
|
-
self.default_language = DEFAULT_LANGUAGE
|
65
|
-
self.default_params = DEFAULT_PARAMS
|
66
|
-
self
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
data/lib/google-maps/location.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require File.expand_path('../api', __FILE__)
|
2
|
-
|
3
|
-
module Google
|
4
|
-
module Maps
|
5
|
-
class Location
|
6
|
-
attr_reader :address, :latitude, :longitude
|
7
|
-
alias :to_s :address
|
8
|
-
|
9
|
-
def initialize(address, latitude, longitude)
|
10
|
-
@address = address
|
11
|
-
@latitude = latitude
|
12
|
-
@longitude = longitude
|
13
|
-
end
|
14
|
-
|
15
|
-
def lat_lng
|
16
|
-
[latitude, longitude]
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.find(address, language=:en)
|
20
|
-
API.query(:geocode_service, :language => language, :address => address).results.map { |result| Location.new(result.formatted_address, result.geometry.location.lat, result.geometry.location.lng) }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
data/lib/google-maps/route.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
require File.expand_path('../api', __FILE__)
|
2
|
-
|
3
|
-
module Google
|
4
|
-
module Maps
|
5
|
-
|
6
|
-
class Route
|
7
|
-
attr_accessor :from, :to, :options
|
8
|
-
|
9
|
-
def initialize(from, to, options={})
|
10
|
-
options = {language: options} unless options.is_a? Hash
|
11
|
-
@from, @to, @options = from, to, {language: :en}.merge(options)
|
12
|
-
end
|
13
|
-
|
14
|
-
def method_missing(name, *args, &block)
|
15
|
-
if route.legs.first.key?(name)
|
16
|
-
route.legs.first.send(name)
|
17
|
-
else
|
18
|
-
super
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def origin_latlong
|
23
|
-
"#{self.start_location.lat},#{self.start_location.lng}"
|
24
|
-
end
|
25
|
-
|
26
|
-
def destination_latlong
|
27
|
-
"#{self.end_location.lat},#{self.end_location.lng}"
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def route
|
32
|
-
# default to the first returned route (the most efficient one)
|
33
|
-
@response ||= API.query(:directions_service, @options.merge(origin: from, destination: to)).routes.first
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
data/lib/google-maps/version.rb
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
-
|
3
|
-
describe Google::Maps::API do
|
4
|
-
it "should raise a custom exception when the query fails by net" do
|
5
|
-
HTTPClient.any_instance.unstub(:get_content)
|
6
|
-
|
7
|
-
Google::Maps.end_point = "http://unknown.tld/"
|
8
|
-
lambda{ Google::Maps.distance("Amsterdam", "Deventer") }.should raise_error(Google::Maps::InvalidResponseException)
|
9
|
-
Google::Maps.end_point = "http://unknown-domain-asdasdasdas123123zxcasd.com/"
|
10
|
-
lambda{ Google::Maps.distance("Amsterdam", "Deventer") }.should raise_error(Google::Maps::InvalidResponseException)
|
11
|
-
Google::Maps.end_point = "http://www.google.com/404"
|
12
|
-
lambda{ Google::Maps.distance("Amsterdam", "Deventer") }.should raise_error(Google::Maps::InvalidResponseException)
|
13
|
-
end
|
14
|
-
|
15
|
-
it "should raise a custom exception when the query fails by Google" do
|
16
|
-
stub_response("over_query_limit.json")
|
17
|
-
lambda{ Google::Maps.distance("Amsterdam", "Deventer") }.should raise_error(Google::Maps::InvalidResponseException)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should raise a custom exception when there are no results" do
|
21
|
-
stub_response("zero-results.json")
|
22
|
-
lambda{ Google::Maps.distance("Blah blah", "Jalala") }.should raise_error(Google::Maps::ZeroResultsException)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should raise a custom exception that is rescue-able" do
|
26
|
-
stub_response("zero-results.json")
|
27
|
-
begin
|
28
|
-
Google::Maps.distance("Blah blah", "Jalala")
|
29
|
-
rescue => error
|
30
|
-
@error = error
|
31
|
-
ensure
|
32
|
-
@error.should_not be_nil
|
33
|
-
@error.should be_a_kind_of StandardError
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
describe "premier signing" do
|
38
|
-
before :each do
|
39
|
-
Google::Maps.configure do |config|
|
40
|
-
config.premier_client_id = "clientID"
|
41
|
-
config.premier_key = "vNIXE0xscrmjlyV-12Nj_BvUPaw="
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should raise an exception when a client id is set but no key" do
|
46
|
-
Google::Maps.premier_key = nil
|
47
|
-
lambda{ Google::Maps.distance("Amsterdam", "Deventer") }.should raise_error(Google::Maps::InvalidPremierConfigurationException)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should sign the url parameters when a client id and premier key is set" do
|
51
|
-
# http://code.google.com/apis/maps/documentation/webservices/index.html#URLSigning
|
52
|
-
|
53
|
-
# Example:
|
54
|
-
# Private Key: vNIXE0xscrmjlyV-12Nj_BvUPaw=
|
55
|
-
# Signature: KrU1TzVQM7Ur0i8i7K3huiw3MsA=
|
56
|
-
# Client ID: clientID
|
57
|
-
# URL: http://maps.googleapis.com/maps/api/geocode/json?address=New+York&sensor=false&client=clientID
|
58
|
-
url = "http://maps.google.com/maps/api/geocode/json?address=New+York&sensor=false&client=clientID"
|
59
|
-
signed_url = Google::Maps::API.send(:premier_signing, url)
|
60
|
-
signed_url.should == "#{url}&signature=KrU1TzVQM7Ur0i8i7K3huiw3MsA="
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should allow a parsed URI object to be used for signing" do
|
64
|
-
url = URI.parse("http://maps.google.com/maps/api/geocode/json?address=New+York&sensor=false&client=clientID")
|
65
|
-
signed_url = Google::Maps::API.send(:premier_signing, url)
|
66
|
-
signed_url.should == "#{url}&signature=KrU1TzVQM7Ur0i8i7K3huiw3MsA="
|
67
|
-
end
|
68
|
-
|
69
|
-
context "per service overrides" do
|
70
|
-
let(:place_id) { "CpQBiAAAAGs4XDizjQoVk9NjuY3ll3aLBLafpDxaFPSJSO7icOj07IRHO4KjjcRIbKEmeSVTcG75kIvwqE7VzA8D7BFvWp8OPwgAiKMveQQUsTGfJrRG5EVd7J34hY8e5JDbaXEPOMUPIWLfiugwUfQqAImvWQCGrMG1iyOpZfaW22NNhornssEg90uxrLbwLJ7QZhwGIRIQSBc_BlD7mILqQaixzTqE1BoUbNrhbmsZYkIurvK4l9exKBryfKk" }
|
71
|
-
let(:api_key) { "some_api_key" }
|
72
|
-
let(:parameters) { [:premier_client_id, :premier_key, :api_key, :default_params] }
|
73
|
-
|
74
|
-
before :each do
|
75
|
-
parameters.each do |what|
|
76
|
-
self.instance_variable_set(:"@old_#{what}", Google::Maps.send(what))
|
77
|
-
end
|
78
|
-
|
79
|
-
Google::Maps.configure do |config|
|
80
|
-
config.premier_client_id = "gme-test"
|
81
|
-
config.premier_key = "secret"
|
82
|
-
config.api_key = api_key
|
83
|
-
config.default_params = {place_details_service: {:use_premier_signing => false}}
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
after :each do
|
88
|
-
Google::Maps.configure do |config|
|
89
|
-
parameters.each do |what|
|
90
|
-
config.send(:"#{what}=", self.instance_variable_get(:"@old_#{what}"))
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should not be used when configured for a certain service" do
|
96
|
-
stub_response("place_details.json", "https://maps.googleapis.com/maps/api/place/details/json?sensor=false&language=nl&placeid=#{place_id}&key=#{api_key}")
|
97
|
-
|
98
|
-
Google::Maps::place(place_id, :nl).should_not be_nil
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
-
require 'logger'
|
3
|
-
|
4
|
-
describe Google::Maps::Logger do
|
5
|
-
it "should be able to log messages when a log output is set" do
|
6
|
-
# fake an exception
|
7
|
-
HTTPClient.any_instance.expects(:get_content).raises("test exception")
|
8
|
-
|
9
|
-
# expect the logger to be called once
|
10
|
-
Logger.any_instance.expects(:error).at_least_once
|
11
|
-
|
12
|
-
# trigger the exception
|
13
|
-
lambda{ Google::Maps.distance("Amsterdam", "Deventer") }.should raise_error
|
14
|
-
end
|
15
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
-
|
3
|
-
describe Google::Maps::PlaceDetails do
|
4
|
-
let(:place_id) { "CpQBiAAAAGs4XDizjQoVk9NjuY3ll3aLBLafpDxaFPSJSO7icOj07IRHO4KjjcRIbKEmeSVTcG75kIvwqE7VzA8D7BFvWp8OPwgAiKMveQQUsTGfJrRG5EVd7J34hY8e5JDbaXEPOMUPIWLfiugwUfQqAImvWQCGrMG1iyOpZfaW22NNhornssEg90uxrLbwLJ7QZhwGIRIQSBc_BlD7mILqQaixzTqE1BoUbNrhbmsZYkIurvK4l9exKBryfKk" }
|
5
|
-
|
6
|
-
context "given a canned response" do
|
7
|
-
before(:each) do
|
8
|
-
stub_response("place_details.json")
|
9
|
-
@details = Google::Maps::PlaceDetails.find(place_id, :nl)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should have a place_id" do
|
13
|
-
@details.place_id.should == place_id
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should have a latlong" do
|
17
|
-
@details.latitude.should == "-33.866975"
|
18
|
-
@details.longitude.should =="151.195677"
|
19
|
-
end
|
20
|
-
|
21
|
-
it "has data containing at least address components" do
|
22
|
-
@details.data.address_components.should_not be_empty
|
23
|
-
end
|
24
|
-
|
25
|
-
context "#address_components" do
|
26
|
-
it "allows easy access by type" do
|
27
|
-
@details.address_components.postal_code.long_name.should eq "2009"
|
28
|
-
@details.address_components.locality.long_name.should eq "Pyrmont"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|