google_maps_service 0.3.0 → 0.4.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.
@@ -9,9 +9,10 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['Edward Samuel Pasaribu']
10
10
  spec.email = ['edwardsamuel92@gmail.com']
11
11
 
12
- spec.summary = %q{Ruby client library (unofficial) for Google Maps API Web Services}
12
+ spec.summary = %q{Ruby gem for Google Maps Web Service APIs }
13
13
  spec.homepage = %q{https://github.com/edwardsamuel/google-maps-services-ruby}
14
14
  spec.license = 'Apache-2.0'
15
+ spec.required_ruby_version = '>= 2.0.0'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
18
  spec.require_paths = ['lib']
@@ -20,10 +21,10 @@ Gem::Specification.new do |spec|
20
21
  spec.add_runtime_dependency 'multi_json', '~> 1.11'
21
22
  spec.add_runtime_dependency 'hurley', '~> 0.1'
22
23
  spec.add_runtime_dependency 'retriable', '~> 2.0', '>= 2.0.2'
23
- spec.add_runtime_dependency 'ruby-hmac', '~> 0.4.0'
24
24
  spec.add_development_dependency 'bundler', '~> 1.7'
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
26
26
  spec.add_development_dependency 'yard', '~> 0.8.7.6'
27
+ spec.add_development_dependency 'redcarpet', '~> 3.3'
27
28
  spec.add_development_dependency 'rspec', '~> 3.3'
28
29
  spec.add_development_dependency 'simplecov', '~> 0.10.0'
29
30
  spec.add_development_dependency 'coveralls', '~> 0.8.2'
@@ -1,6 +1,46 @@
1
+ # Google Maps Web Service API.
1
2
  module GoogleMapsService
2
3
  class << self
3
- attr_accessor :key, :client_id, :client_secret, :connect_timeout, :read_timeout, :retry_timeout, :queries_per_second
4
+
5
+ # Global key.
6
+ # @see Client#key
7
+ # @return [String]
8
+ attr_accessor :key
9
+
10
+ # Global client_id.
11
+ # @see Client#client_id
12
+ # @return [String]
13
+ attr_accessor :client_id
14
+
15
+ # Global client_secret.
16
+ # @see Client#client_secret
17
+ # @return [String]
18
+ attr_accessor :client_secret
19
+
20
+ # Global retry_timeout.
21
+ # @see Client#retry_timeout
22
+ # @return [Integer]
23
+ attr_accessor :retry_timeout
24
+
25
+ # Global queries_per_second.
26
+ # @see Client#queries_per_second
27
+ # @return [Integer]
28
+ attr_accessor :queries_per_second
29
+
30
+ # Global request_options.
31
+ # @see Client#initialize-instance_method
32
+ # @return [Hurley::RequestOptions]
33
+ attr_accessor :request_options
34
+
35
+ # Global ssl_options.
36
+ # @see Client#initialize-instance_method
37
+ # @return [Hurley::SslOptions]
38
+ attr_accessor :ssl_options
39
+
40
+ # Global connection.
41
+ # @see Client#initialize-instance_method
42
+ # @return [Object]
43
+ attr_accessor :connection
4
44
 
5
45
  def configure
6
46
  yield self
@@ -9,13 +49,6 @@ module GoogleMapsService
9
49
  end
10
50
 
11
51
  require 'google_maps_service/version'
12
- require 'google_maps_service/errors'
13
- require 'google_maps_service/convert'
14
- require 'google_maps_service/directions'
15
- require 'google_maps_service/distance_matrix'
16
- require 'google_maps_service/elevation'
17
- require 'google_maps_service/geocoding'
18
- require 'google_maps_service/roads'
19
- require 'google_maps_service/time_zone'
20
52
  require 'google_maps_service/client'
53
+ require 'google_maps_service/polyline'
21
54
  end
@@ -0,0 +1,6 @@
1
+ module GoogleMapsService
2
+
3
+ # Collections of Google Maps Web Services
4
+ module Apis
5
+ end
6
+ end
@@ -1,18 +1,39 @@
1
- require_relative './validator'
1
+ require_relative '../validator'
2
2
 
3
- module GoogleMapsService
3
+ module GoogleMapsService::Apis
4
4
 
5
5
  # Performs requests to the Google Maps Directions API.
6
6
  module Directions
7
7
 
8
8
  # Get directions between an origin point and a destination point.
9
9
  #
10
+ # @example Simple directions
11
+ # routes = client.directions('Sydney', 'Melbourne')
12
+ #
13
+ # @example Complex bicycling directions
14
+ # routes = client.directions('Sydney', 'Melbourne',
15
+ # mode: 'bicycling',
16
+ # avoid: ['highways', 'tolls', 'ferries'],
17
+ # units: 'metric',
18
+ # region: 'au')
19
+ #
20
+ # @example Public transportation directions
21
+ # an_hour_from_now = Time.now - (1.0/24)
22
+ # routes = client.directions('Sydney Town Hall', 'Parramatta, NSW',
23
+ # mode: 'transit',
24
+ # arrival_time: an_hour_from_now)
25
+ #
26
+ # @example Walking with alternative routes
27
+ # routes = client.directions('Sydney Town Hall', 'Parramatta, NSW',
28
+ # mode: 'walking',
29
+ # alternatives: true)
30
+ #
10
31
  # @param [String, Hash, Array] origin The address or latitude/longitude value from which you wish
11
32
  # to calculate directions.
12
33
  # @param [String, Hash, Array] destination The address or latitude/longitude value from which
13
34
  # you wish to calculate directions.
14
35
  # @param [String] mode Specifies the mode of transport to use when calculating
15
- # directions. One of "driving", "walking", "bicycling" or "transit"
36
+ # directions. One of `driving`, `walking`, `bicycling` or `transit`.
16
37
  # @param [Array<String>, Array<Hash>, Array<Array>] waypoints Specifies an array of waypoints. Waypoints alter a
17
38
  # route by routing it through the specified location(s).
18
39
  # @param [Boolean] alternatives If True, more than one route may be returned in the
@@ -21,40 +42,40 @@ module GoogleMapsService
21
42
  # indicated features.
22
43
  # @param [String] language The language in which to return results.
23
44
  # @param [String] units Specifies the unit system to use when displaying results.
24
- # "metric" or "imperial"
25
- # @param [String] region The region code, specified as a ccTLD ("top-level domain"
45
+ # `metric` or `imperial`.
46
+ # @param [String] region The region code, specified as a ccTLD (_top-level domain_)
26
47
  # two-character value.
27
48
  # @param [Integer, DateTime] departure_time Specifies the desired time of departure.
28
49
  # @param [Integer, DateTime] arrival_time Specifies the desired time of arrival for transit
29
- # directions. Note: you can't specify both departure_time and
30
- # arrival_time.
50
+ # directions. Note: you can not specify both `departure_time` and
51
+ # `arrival_time`.
31
52
  # @param [Boolean] optimize_waypoints Optimize the provided route by rearranging the
32
53
  # waypoints in a more efficient order.
33
54
  # @param [String, Array<String>] transit_mode Specifies one or more preferred modes of transit.
34
55
  # This parameter may only be specified for requests where the mode is
35
- # transit. Valid values are "bus", "subway", "train", "tram", "rail".
36
- # "rail" is equivalent to ["train", "tram", "subway"].
56
+ # transit. Valid values are `bus`, `subway`, `train`, `tram` or `rail`.
57
+ # `rail` is equivalent to `["train", "tram", "subway"]`.
37
58
  # @param [String] transit_routing_preference Specifies preferences for transit
38
- # requests. Valid values are "less_walking" or "fewer_transfers"
59
+ # requests. Valid values are `less_walking` or `fewer_transfers`.
39
60
  #
40
- # @return List of routes
41
- def directions(origin: nil, destination: nil,
61
+ # @return [Array] Array of routes.
62
+ def directions(origin, destination,
42
63
  mode: nil, waypoints: nil, alternatives: false, avoid: nil,
43
64
  language: nil, units: nil, region: nil, departure_time: nil,
44
65
  arrival_time: nil, optimize_waypoints: false, transit_mode: nil,
45
66
  transit_routing_preference: nil)
46
67
 
47
68
  params = {
48
- origin: _convert_waypoint(origin),
49
- destination: _convert_waypoint(destination)
69
+ origin: GoogleMapsService::Convert.waypoint(origin),
70
+ destination: GoogleMapsService::Convert.waypoint(destination)
50
71
  }
51
72
 
52
73
  params[:mode] = GoogleMapsService::Validator.travel_mode(mode) if mode
53
74
 
54
- if waypoints
75
+ if waypoints = waypoints
55
76
  waypoints = GoogleMapsService::Convert.as_list(waypoints)
56
- waypoints = waypoints.map { |waypoint| _convert_waypoint(waypoint) }
57
- waypoints = ["optimize:true"] + waypoints if optimize_waypoints
77
+ waypoints = waypoints.map { |waypoint| GoogleMapsService::Convert.waypoint(waypoint) }
78
+ waypoints = ['optimize:true'] + waypoints if optimize_waypoints
58
79
 
59
80
  params[:waypoints] = GoogleMapsService::Convert.join_list("|", waypoints)
60
81
  end
@@ -76,13 +97,5 @@ module GoogleMapsService
76
97
 
77
98
  return get('/maps/api/directions/json', params)[:routes]
78
99
  end
79
-
80
- private
81
- def _convert_waypoint(waypoint)
82
- if waypoint.kind_of?(String)
83
- return waypoint
84
- end
85
- return GoogleMapsService::Convert.latlng(waypoint)
86
- end
87
100
  end
88
101
  end
@@ -1,45 +1,64 @@
1
- require_relative './validator'
1
+ require_relative '../validator'
2
2
 
3
- module GoogleMapsService
3
+ module GoogleMapsService::Apis
4
4
 
5
5
  # Performs requests to the Google Maps Distance Matrix API.
6
6
  module DistanceMatrix
7
7
 
8
8
  # Gets travel distance and time for a matrix of origins and destinations.
9
9
  #
10
- # @param [Array<String>, Array<Hash>, Array<Array>] origins One or more addresses and/or latitude/longitude values,
10
+ # @example Simple distance matrix
11
+ # origins = ["Perth, Australia", "Sydney, Australia",
12
+ # "Melbourne, Australia", "Adelaide, Australia",
13
+ # "Brisbane, Australia", "Darwin, Australia",
14
+ # "Hobart, Australia", "Canberra, Australia"]
15
+ # destinations = ["Uluru, Australia",
16
+ # "Kakadu, Australia",
17
+ # "Blue Mountains, Australia",
18
+ # "Bungle Bungles, Australia",
19
+ # "The Pinnacles, Australia"]
20
+ # matrix = client.distance_matrix(origins, destinations)
21
+ #
22
+ # @example Complex distance matrix
23
+ # origins = ["Bobcaygeon ON", [41.43206, -81.38992]]
24
+ # destinations = [[43.012486, -83.6964149], {lat: 42.8863855, lng: -78.8781627}]
25
+ # matrix = client.distance_matrix(origins, destinations,
26
+ # mode: 'driving',
27
+ # language: 'en-AU',
28
+ # avoid: 'tolls',
29
+ # units: 'imperial')
30
+ #
31
+ # @param [Array] origins One or more addresses and/or lat/lon pairs,
11
32
  # from which to calculate distance and time. If you pass an address
12
33
  # as a string, the service will geocode the string and convert it to
13
- # a latitude/longitude coordinate to calculate directions.
14
- # @param [Array<String>, Array<Hash>, Array<Array>] destinations One or more addresses and/or lat/lng values, to
34
+ # a lat/lon coordinate to calculate directions.
35
+ # @param [Array] destinations One or more addresses and/or lat/lon pairs, to
15
36
  # which to calculate distance and time. If you pass an address as a
16
37
  # string, the service will geocode the string and convert it to a
17
- # latitude/longitude coordinate to calculate directions.
38
+ # lat/lon coordinate to calculate directions.
18
39
  # @param [String] mode Specifies the mode of transport to use when calculating
19
- # directions. Valid values are "driving", "walking", "transit" or
20
- # "bicycling".
40
+ # directions. Valid values are `driving`, `walking`, `transit` or `bicycling`.
21
41
  # @param [String] language The language in which to return results.
22
42
  # @param [String] avoid Indicates that the calculated route(s) should avoid the
23
- # indicated features. Valid values are "tolls", "highways" or "ferries"
43
+ # indicated features. Valid values are `tolls`, `highways` or `ferries`.
24
44
  # @param [String] units Specifies the unit system to use when displaying results.
25
- # Valid values are "metric" or "imperial"
45
+ # Valid values are `metric` or `imperial`.
26
46
  # @param [Integer, DateTime] departure_time Specifies the desired time of departure.
27
47
  # @param [Integer, DateTime] arrival_time Specifies the desired time of arrival for transit
28
- # directions. Note: you can't specify both departure_time and
29
- # arrival_time.
48
+ # directions. Note: you can not specify both `departure_time` and `arrival_time`.
30
49
  # @param [String, Array<String>] transit_mode Specifies one or more preferred modes of transit.
31
50
  # This parameter may only be specified for requests where the mode is
32
- # transit. Valid values are "bus", "subway", "train", "tram", "rail".
33
- # "rail" is equivalent to ["train", "tram", "subway"].
51
+ # transit. Valid values are `bus`, `subway`, `train`, `tram`, or `rail`.
52
+ # `rail` is equivalent to `["train", "tram", "subway"]`.
34
53
  # @param [String] transit_routing_preference Specifies preferences for transit
35
- # requests. Valid values are "less_walking" or "fewer_transfers"
54
+ # requests. Valid values are `less_walking` or `fewer_transfers`.
36
55
  #
37
- # @return matrix of distances. Results are returned in rows, each row
56
+ # @return [Hash] Matrix of distances. Results are returned in rows, each row
38
57
  # containing one origin paired with each destination.
39
- def distance_matrix(origins: nil, destinations: nil,
40
- mode: nil, language: nil, avoid: nil, units: nil,
41
- departure_time: nil, arrival_time: nil, transit_mode: nil,
42
- transit_routing_preference: nil)
58
+ def distance_matrix(origins, destinations,
59
+ mode: nil, language: nil, avoid: nil, units: nil,
60
+ departure_time: nil, arrival_time: nil, transit_mode: nil,
61
+ transit_routing_preference: nil)
43
62
  params = {
44
63
  origins: GoogleMapsService::Convert.waypoints(origins),
45
64
  destinations: GoogleMapsService::Convert.waypoints(destinations)
@@ -57,7 +76,7 @@ module GoogleMapsService
57
76
  raise ArgumentError, 'Should not specify both departure_time and arrival_time.'
58
77
  end
59
78
 
60
- params[:transit_mode] = GoogleMapsService::Convert.join_list("|", transit_mode) if transit_mode
79
+ params[:transit_mode] = GoogleMapsService::Convert.join_list('|', transit_mode) if transit_mode
61
80
  params[:transit_routing_preference] = transit_routing_preference if transit_routing_preference
62
81
 
63
82
  return get('/maps/api/distancematrix/json', params)
@@ -1,43 +1,50 @@
1
- module GoogleMapsService
1
+ module GoogleMapsService::Apis
2
2
 
3
3
  # Performs requests to the Google Maps Elevation API.
4
4
  module Elevation
5
5
 
6
6
  # Provides elevation data for locations provided on the surface of the
7
7
  # earth, including depth locations on the ocean floor (which return negative
8
- # values)
8
+ # values).
9
+ #
10
+ # @example Single point elevation
11
+ # results = client.elevation({latitude: 40.714728, longitude: -73.998672})
12
+ #
13
+ # @example Multiple points elevation
14
+ # locations = [[40.714728, -73.998672], [-34.397, 150.644]]
15
+ # results = client.elevation(locations)
9
16
  #
10
17
  # @param [Array] locations A single latitude/longitude hash, or an array of
11
18
  # latitude/longitude hash from which you wish to calculate
12
19
  # elevation data.
13
20
  #
14
21
  # @return [Array] Array of elevation data responses
15
- def elevation(locations: nil)
16
- params = {}
17
- if locations.kind_of?(Array) and locations.length == 2 and not locations[0].kind_of?(Array)
18
- locations = [locations]
19
- end
20
-
21
- params[:locations] = _convert_locations(locations)
22
+ def elevation(locations)
23
+ params = {
24
+ locations: GoogleMapsService::Convert.waypoints(locations)
25
+ }
22
26
 
23
- return get("/maps/api/elevation/json", params)[:results]
27
+ return get('/maps/api/elevation/json', params)[:results]
24
28
  end
25
29
 
26
30
  # Provides elevation data sampled along a path on the surface of the earth.
27
31
  #
32
+ # @example Elevation along path
33
+ # locations = [[40.714728, -73.998672], [-34.397, 150.644]]
34
+ # results = client.elevation_along_path(locations, 5)
35
+ #
28
36
  # @param [String, Array] path A encoded polyline string, or a list of
29
- # latitude/longitude tuples from which you wish to calculate
37
+ # latitude/longitude pairs from which you wish to calculate
30
38
  # elevation data.
31
- #
32
39
  # @param [Integer] samples The number of sample points along a path for which to
33
40
  # return elevation data.
34
41
  #
35
42
  # @return [Array] Array of elevation data responses
36
- def elevation_along_path(path: nil, samples: nil)
43
+ def elevation_along_path(path, samples)
37
44
  if path.kind_of?(String)
38
45
  path = "enc:%s" % path
39
46
  else
40
- path = _convert_locations(path)
47
+ path = GoogleMapsService::Convert.waypoints(path)
41
48
  end
42
49
 
43
50
  params = {
@@ -45,13 +52,7 @@ module GoogleMapsService
45
52
  samples: samples
46
53
  }
47
54
 
48
- return get("/maps/api/elevation/json", params)[:results]
55
+ return get('/maps/api/elevation/json', params)[:results]
49
56
  end
50
-
51
- private
52
- def _convert_locations(locations)
53
- locations = GoogleMapsService::Convert.as_list(locations)
54
- return GoogleMapsService::Convert.join_list("|", locations.map { |k| k.kind_of?(String) ? k : GoogleMapsService::Convert.latlng(k) })
55
- end
56
57
  end
57
58
  end
@@ -0,0 +1,85 @@
1
+ require 'google_maps_service/convert'
2
+
3
+ module GoogleMapsService::Apis
4
+
5
+ # Performs requests to the Google Maps Geocoding API.
6
+ module Geocoding
7
+
8
+ # Geocoding is the process of converting addresses
9
+ # (like `"1600 Amphitheatre Parkway, Mountain View, CA"`) into geographic
10
+ # coordinates (like latitude 37.423021 and longitude -122.083739), which you
11
+ # can use to place markers or position the map.
12
+ #
13
+ # @example Geocode an address
14
+ # results = client.geocode('Sydney')
15
+ #
16
+ # @example Geocode a component only
17
+ # results = client.geocode(nil, components: {administrative_area: 'TX', country: 'US'})
18
+ #
19
+ # @example Geocode an address and component
20
+ # results = client.geocode('Sydney', components: {administrative_area: 'TX', country: 'US'})
21
+ #
22
+ # @example Multiple parameters
23
+ # results = client.geocode('Sydney',
24
+ # components: {administrative_area: 'TX', country: 'US'},
25
+ # bounds: {
26
+ # northeast: {lat: 32.7183997, lng: -97.26864001970849},
27
+ # southwest: {lat: 32.7052583, lng: -97.27133798029149}
28
+ # },
29
+ # region: 'us')
30
+ #
31
+ # @param [String] address The address to geocode. You must specify either this value and/or `components`.
32
+ # @param [Hash] components A component filter for which you wish to obtain a geocode,
33
+ # for example: `{'administrative_area': 'TX','country': 'US'}`
34
+ # @param [String, Hash] bounds The bounding box of the viewport within which to bias geocode
35
+ # results more prominently. Accept string or hash with `northeast` and `southwest` keys.
36
+ # @param [String] region The region code, specified as a ccTLD (_top-level domain_)
37
+ # two-character value.
38
+ # @param [String] language The language in which to return results.
39
+ #
40
+ # @return [Array] Array of geocoding results.
41
+ def geocode(address, components: nil, bounds: nil, region: nil, language: nil)
42
+ params = {}
43
+
44
+ params[:address] = address if address
45
+ params[:components] = GoogleMapsService::Convert.components(components) if components
46
+ params[:bounds] = GoogleMapsService::Convert.bounds(bounds) if bounds
47
+ params[:region] = region if region
48
+ params[:language] = language if language
49
+
50
+ return get('/maps/api/geocode/json', params)[:results]
51
+ end
52
+
53
+ # Reverse geocoding is the process of converting geographic coordinates into a
54
+ # human-readable address.
55
+ #
56
+ # @example Simple lat/lon pair
57
+ # client.reverse_geocode({lat: 40.714224, lng: -73.961452})
58
+ #
59
+ # @example Multiple parameters
60
+ # client.reverse_geocode([40.714224, -73.961452],
61
+ # location_type: ['ROOFTOP', 'RANGE_INTERPOLATED'],
62
+ # result_type: ['street_address', 'route'],
63
+ # language: 'es')
64
+ #
65
+ # @param [Hash, Array] latlng The latitude/longitude value for which you wish to obtain
66
+ # the closest, human-readable address.
67
+ # @param [String, Array<String>] location_type One or more location types to restrict results to.
68
+ # @param [String, Array<String>] result_type One or more address types to restrict results to.
69
+ # @param [String] language The language in which to return results.
70
+ #
71
+ # @return [Array] Array of reverse geocoding results.
72
+ def reverse_geocode(latlng, location_type: nil, result_type: nil, language: nil)
73
+ params = {
74
+ latlng: GoogleMapsService::Convert.latlng(latlng)
75
+ }
76
+
77
+ params[:result_type] = GoogleMapsService::Convert.join_list('|', result_type) if result_type
78
+ params[:location_type] = GoogleMapsService::Convert.join_list('|', location_type) if location_type
79
+ params[:language] = language if language
80
+
81
+ return get('/maps/api/geocode/json', params)[:results]
82
+ end
83
+
84
+ end
85
+ end