class ActionDispatch::Routing::RouteSet::NamedRouteCollection::UrlHelper::OptimizedUrlHelper

:nodoc:

def call(t, args)

def call(t, args)
  if args.size == arg_size && !args.last.is_a?(Hash) && optimize_routes_generation?(t)
    options = @options.dup
    options.merge!(t.url_options) if t.respond_to?(:url_options)
    options[:path] = optimized_helper(args)
    ActionDispatch::Http::URL.url_for(options)
  else
    super
  end
end

def initialize(route, options)

def initialize(route, options)
  super
  @klass          = Journey::Router::Utils
  @required_parts = @route.required_parts
  @arg_size       = @required_parts.size
  @optimized_path = @route.optimized_path
end

def missing_keys(args)

def missing_keys(args)
  args.select{ |part, arg| arg.nil? || arg.empty? }.keys
end

def optimize_routes_generation?(t)

def optimize_routes_generation?(t)
  t.send(:optimize_routes_generation?)
end

def optimized_helper(args)

def optimized_helper(args)
  params = Hash[parameterize_args(args)]
  missing_keys = missing_keys(params)
  unless missing_keys.empty?
    raise_generation_error(params, missing_keys)
  end
  @optimized_path.map{ |segment| replace_segment(params, segment) }.join
end

def parameterize_args(args)

def parameterize_args(args)
  @required_parts.zip(args.map(&:to_param))
end

def raise_generation_error(args, missing_keys)

def raise_generation_error(args, missing_keys)
  constraints = Hash[@route.requirements.merge(args).sort]
  message = "No route matches #{constraints.inspect}"
  message << " missing required keys: #{missing_keys.sort.inspect}"
  raise ActionController::UrlGenerationError, message
end

def replace_segment(params, segment)

def replace_segment(params, segment)
  Symbol === segment ? @klass.escape_segment(params[segment]) : segment
end