module ActionDispatch::Routing::UrlFor

def _routes_context

def _routes_context
  self
end

def _with_routes(routes)

def _with_routes(routes)
  old_routes, @_routes = @_routes, routes
  yield
ensure
  @_routes = old_routes
end

def initialize(*)

def initialize(*)
  @_routes = nil
  super
end

def optimize_routes_generation?

def optimize_routes_generation?
  _routes.optimize_routes_generation? && default_url_options.empty?
end

def url_for(options = nil)

last +url_for+ calls.
implicitly used by +url_for+ can always be overwritten like shown on the
and the helper used the one from the route's path. Any path parameter
Notice that no +:id+ parameter was provided to the first +url_for+ call

url_for(only_path: true, action: 'edit', id: 2) # => '/users/2/edit'
url_for(only_path: true, action: 'edit') # => '/users/1/edit'
url_for(only_path: true) # => '/users/1'

through `GET /users/1`:
placed in the path). Given that the current action has been reached
(e.g. +:controller+, +:action+, +:id+ and any other parameters that are
Missing routes keys may be filled in from the current request's parameters

# => '/myapp/tasks/testing'
url_for controller: 'tasks', action: 'testing', host: 'somehost.org', script_name: "/myapp", only_path: true
# => 'http://somehost.org/myapp/tasks/testing'
url_for controller: 'tasks', action: 'testing', host: 'somehost.org', script_name: "/myapp"
# => 'http://somehost.org/tasks/testing?number=33'
url_for controller: 'tasks', action: 'testing', host: 'somehost.org', number: '33'
# => 'http://somehost.org/tasks/testing/'
url_for controller: 'tasks', action: 'testing', trailing_slash: true
# => '/tasks/testing#ok'
url_for controller: 'tasks', action: 'testing', host: 'somehost.org', anchor: 'ok', only_path: true
# => 'http://somehost.org:8080/tasks/testing'
url_for controller: 'tasks', action: 'testing', host: 'somehost.org', port: '8080'

+url_for+ is forwarded to the Routes module.
Any other key (:controller, :action, etc.) given to

* :script_name - Specifies application path relative to domain root. If provided, prepends application path.
* :trailing_slash - If true, adds a trailing slash, as in "/archive/2009/"
* :anchor - An anchor name to be appended to the path.
* :port - Optionally specify the port to connect to.
ActionDispatch::Http::URL.tld_length, which in turn defaults to 1.
:subdomain or :domain are supplied. Defaults to
* :tld_length - Number of labels the TLD id composed of, only used if
to split the domain from the host.
* :domain - Specifies the domain of the link, using the +tld_length+
If false, removes all subdomains from the host part of the link.
to split the subdomain from the host.
* :subdomain - Specifies the subdomain of the link, using the +tld_length+
provided either explicitly, or via +default_url_options+.
If :only_path is false, this option must be
* :host - Specifies the host the link should be targeted at.
* :protocol - The protocol to connect to. Defaults to 'http'.
* :only_path - If true, the relative url is returned. Defaults to +false+.

routes defined in routes.rb. The following options are supported:
Generate a url based on the options provided, default_url_options and the
def url_for(options = nil)
  case options
  when nil
    _routes.url_for(url_options.symbolize_keys)
  when Hash
    route_name = options.delete :use_route
    _routes.url_for(options.symbolize_keys.reverse_merge!(url_options),
                   route_name)
  when ActionController::Parameters
    unless options.permitted?
      raise ArgumentError.new(ActionDispatch::Routing::INSECURE_URL_PARAMETERS_MESSAGE)
    end
    route_name = options.delete :use_route
    _routes.url_for(options.to_h.symbolize_keys.
                    reverse_merge!(url_options), route_name)
  when String
    options
  when Symbol
    HelperMethodBuilder.url.handle_string_call self, options
  when Array
    components = options.dup
    polymorphic_url(components, components.extract_options!)
  when Class
    HelperMethodBuilder.url.handle_class_call self, options
  else
    HelperMethodBuilder.url.handle_model_call self, options
  end
end

def url_options

go into url_options.
with `default_url_options`. Application logic should not
Hook overridden in controller to add request information
def url_options
  default_url_options
end