class GoogleDistanceMatrix::UrlBuilder

Takes care of building the url for given matrix

Constants

BASE_URL
DELIMITER
MAX_URL_SIZE

Attributes

matrix[R]

Public Class Methods

new(matrix) click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 15
def initialize(matrix)
  @matrix = matrix

  raise InvalidMatrix, matrix if matrix.invalid?
end

Public Instance Methods

filtered_url() click to toggle source

Returns the URL filtered as the configuration of the matrix dictates

@return String

# File lib/google_distance_matrix/url_builder.rb, line 35
def filtered_url
  filter_url sensitive_url
end
sensitive_url() click to toggle source

Returns the URL we'll call Google API with

This URL contains key and signature and is therefor sensitive.

@return String @see filtered_url

# File lib/google_distance_matrix/url_builder.rb, line 28
def sensitive_url
  @sensitive_url ||= build_url
end

Private Instance Methods

build_url() click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 41
def build_url
  url = [protocol, BASE_URL, '?', query_params_string].join

  if sign_url?
    url = GoogleBusinessApiUrlSigner.add_signature(
      url, configuration.google_business_api_private_key
    )
  end

  raise MatrixUrlTooLong.new url, MAX_URL_SIZE if url.length > MAX_URL_SIZE

  url
end
escape(string) click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 111
def escape(string)
  CGI.escape string
end
filter_url(url) click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 55
def filter_url(url)
  configuration.filter_parameters_in_logged_url.each do |param|
    url = url.gsub(/(#{param})=.*?(&|$)/, '\1=[FILTERED]\2')
  end

  url
end
include_api_key?() click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 68
def include_api_key?
  configuration.google_api_key.present?
end
params() click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 76
def params
  configuration.to_param.merge(
    origins: places_to_param(matrix.origins),
    destinations: places_to_param(matrix.destinations)
  )
end
places_to_param(places) click to toggle source

rubocop:disable Metrics/MethodLength rubocop:disable Metrics/AbcSize

# File lib/google_distance_matrix/url_builder.rb, line 85
def places_to_param(places)
  places_to_param_config = { lat_lng_scale: configuration.lat_lng_scale }

  out = []
  polyline_encode_buffer = PolylineEncoderBuffer.new

  places.each do |place|
    if place.lat_lng? && configuration.use_encoded_polylines
      polyline_encode_buffer << place.lat_lng
    else
      polyline_encode_buffer.flush to: out
      out << escape(place.to_param(places_to_param_config))
    end
  end

  polyline_encode_buffer.flush to: out

  out.join(DELIMITER)
end
protocol() click to toggle source

rubocop:enable Metrics/MethodLength rubocop:enable Metrics/AbcSize

# File lib/google_distance_matrix/url_builder.rb, line 107
def protocol
  configuration.protocol + '://'
end
query_params_string() click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 72
def query_params_string
  params.to_a.map { |key_value| key_value.join('=') }.join('&')
end
sign_url?() click to toggle source
# File lib/google_distance_matrix/url_builder.rb, line 63
def sign_url?
  configuration.google_business_api_client_id.present? &&
    configuration.google_business_api_private_key.present?
end