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