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
  @path_parts   = @route.required_parts
  @arg_size     = @path_parts.size
  @string_route = @route.optimized_path
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)
  path = @string_route.dup
  klass = Journey::Router::Utils
  @path_parts.zip(args) do |part, arg|
    parameterized_arg = arg.to_param
    if parameterized_arg.nil? || parameterized_arg.empty?
      raise_generation_error(args)
    end
    # Replace each route parameter
    # e.g. :id for regular parameter or *path for globbing
    # with ruby string interpolation code
    path.gsub!(/(\*|:)#{part}/, klass.escape_fragment(parameterized_arg))
  end
  path
end

def raise_generation_error(args)

def raise_generation_error(args)
  parts, missing_keys = [], []
  @path_parts.zip(args) do |part, arg|
    parameterized_arg = arg.to_param
    if parameterized_arg.nil? || parameterized_arg.empty?
      missing_keys << part
    end
    parts << [part, arg]
  end
  message = "No route matches #{Hash[parts].inspect}"
  message << " missing required keys: #{missing_keys.inspect}"
  raise ActionController::UrlGenerationError, message
end