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

def self.create(route, options, route_name, url_strategy)

def self.create(route, options, route_name, url_strategy)
  if optimize_helper?(route)
    OptimizedUrlHelper.new(route, options, route_name, url_strategy)
  else
    new route, options, route_name, url_strategy
  end
end

def self.optimize_helper?(route)

def self.optimize_helper?(route)
  !route.glob? && route.path.requirements.empty?
end

def call(t, args, inner_options)

def call(t, args, inner_options)
  controller_options = t.url_options
  options = controller_options.merge @options
  hash = handle_positional_args(controller_options,
                                deprecate_string_options(inner_options) || {},
                                args,
                                options,
                                @segment_keys)
  t._routes.url_for(hash, route_name, url_strategy)
end

def deprecate_string_options(options)

def deprecate_string_options(options)
  options ||= {}
  deprecated_string_options = options.keys & DEPRECATED_STRING_OPTIONS
  if deprecated_string_options.any?
    msg = "Calling URL helpers with string keys #{deprecated_string_options.join(", ")} is deprecated. Use symbols instead."
    ActiveSupport::Deprecation.warn(msg)
    deprecated_string_options.each do |option|
      value = options.delete(option)
      options[option.to_sym] = value
    end
  end
  options
end

def handle_positional_args(controller_options, inner_options, args, result, path_params)

def handle_positional_args(controller_options, inner_options, args, result, path_params)
  if args.size > 0
    # take format into account
    if path_params.include?(:format)
      path_params_size = path_params.size - 1
    else
      path_params_size = path_params.size
    end
    if args.size < path_params_size
      path_params -= controller_options.keys
      path_params -= result.keys
    end
    path_params.each { |param|
      value = inner_options.fetch(param) { args.shift }
      unless param == :format && value.nil?
        result[param] = value
      end
    }
  end
  result.merge!(inner_options)
end

def initialize(route, options, route_name, url_strategy)

def initialize(route, options, route_name, url_strategy)
  @options      = options
  @segment_keys = route.segment_keys.uniq
  @route        = route
  @url_strategy = url_strategy
  @route_name   = route_name
end