class GoogleMapsAPI::Directions::Request
Constants
- BASE_PATH
Attributes
destination[RW]
http_adapter[RW]
options[RW]
origin[RW]
Public Class Methods
build(origin, destination, options = {})
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 17 def self.build(origin, destination, options = {}) self.new(origin, destination, options) end
new(origin, destination, options = {})
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 8 def initialize(origin, destination, options = {}) origin = origin.to_ary.join(",") if origin.respond_to?(:to_ary) destination = destination.to_ary.join(",") if destination.respond_to?(:to_ary) @origin = origin @destination = destination @options = options @http_adapter = nil end
Public Instance Methods
business_account?()
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 59 def business_account? options.key?(:key) && options.key?(:client) end
perform()
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 21 def perform response = http_adapter.get_response(uri) if response.is_a?(Net::HTTPSuccess) return GoogleMapsAPI::Directions::Response.from_json(response.body) else msg = "The response was not successful (200). Call #response for datails." exception = GoogleMapsAPI::Directions::ResponseError.new(msg) exception.response = response raise exception end end
scheme()
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 51 def scheme options[:https] ? "https" : "http" end
uri()
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 33 def uri base_host = GoogleMapsAPI::Core::BASE_HOST uri = "#{scheme}://#{base_host}#{BASE_PATH}" query_params = prepared_options.merge( {origin: origin, destination: destination} ).reject { |key, value| [:client, :channel].include?(key) } if business_account? query_params = query_params.reject { |key, value| [:key].include?(key) } uri = "#{uri}?#{to_query(query_params)}" uri = sign_uri(uri) else uri = URI("#{uri}?#{URI.encode_www_form(query_params)}") end uri end
Private Instance Methods
default_options()
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 65 def default_options { sensor: false, mode: "driving", language: "en", units: "metric", region: "us" } end
prepared_options()
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 75 def prepared_options options = default_options.merge(self.options) # Symbolizes the options keys options.keys.each do |key| options[(key.to_sym rescue key) || key] = options.delete(key) end options[:departure_time] = time_or_date_to_unix(options[:departure_time]) options[:arrival_time] = time_or_date_to_unix(options[:arrival_time]) if options[:waypoints].respond_to?(:collect) waypoints = options[:waypoints].collect do |w| w.respond_to?(:to_ary) ? w.to_ary.join(",") : w end options[:waypoints] = waypoints.join("|") end options.delete_if { |key, value| value.to_s.strip.empty? } options end
sign_uri(uri)
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 104 def sign_uri(uri) options = prepared_options GoogleMapsAPI::Core::URISigner.sign( uri.to_s, options[:client], options[:key], options[:channel] ) end
time_or_date_to_unix(time_or_date)
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 98 def time_or_date_to_unix(time_or_date) return time_or_date.to_i if time_or_date.is_a?(Time) return time_or_date.to_time.to_i if time_or_date.is_a?(Date) time_or_date end
to_query(hash)
click to toggle source
# File lib/google_maps_api/directions/request.rb, line 114 def to_query(hash) hash.to_a.map { |x| "#{x[0]}=#{x[1]}" }.join("&") end