class ActionDispatch::Routing::RouteSet::NamedRouteCollection

def define_url_helper(route, name, kind, options)


foo_url(bar, baz, bang, :sort_by => 'baz')

Also allow options hash, so you can do:

foo_url(:bar => bar, :baz => baz, :bang => bang)

Instead of:

foo_url(bar, baz, bang)

with corresponding dynamic segments, so you can do:
Create a url helper allowing ordered parameters to be associated
def define_url_helper(route, name, kind, options)
  selector = url_helper_name(name, kind)
  hash_access_method = hash_access_name(name, kind)
  @module.module_eval <<-END_EVAL, __FILE__, __LINE__ + 1
    def #{selector}(*args)
      options =  #{hash_access_method}(args.extract_options!)
      if args.any?
        options[:_positional_args] = args
        options[:_positional_keys] = #{route.segment_keys.inspect}
      end
      url_for(options)
    end
  END_EVAL
  helpers << selector
end