2009-03-12 15:19:13 -04:00
|
|
|
module ActionController
|
|
|
|
module UrlFor
|
2009-05-28 12:35:36 -04:00
|
|
|
extend ActiveSupport::Concern
|
2009-05-27 04:40:43 -04:00
|
|
|
|
2009-05-29 18:03:23 -04:00
|
|
|
include RackConvenience
|
2009-05-27 04:40:43 -04:00
|
|
|
|
2009-05-19 21:08:04 -04:00
|
|
|
def process_action(*)
|
|
|
|
initialize_current_url
|
|
|
|
super
|
|
|
|
end
|
|
|
|
|
2009-03-12 15:19:13 -04:00
|
|
|
def initialize_current_url
|
|
|
|
@url = UrlRewriter.new(request, params.clone)
|
|
|
|
end
|
|
|
|
|
|
|
|
# Overwrite to implement a number of default options that all url_for-based methods will use. The default options should come in
|
|
|
|
# the form of a hash, just like the one you would use for url_for directly. Example:
|
|
|
|
#
|
|
|
|
# def default_url_options(options)
|
|
|
|
# { :project => @project.active? ? @project.url_name : "unknown" }
|
|
|
|
# end
|
|
|
|
#
|
|
|
|
# As you can infer from the example, this is mostly useful for situations where you want to centralize dynamic decisions about the
|
|
|
|
# urls as they stem from the business domain. Please note that any individual url_for call can always override the defaults set
|
|
|
|
# by this method.
|
|
|
|
def default_url_options(options = nil)
|
|
|
|
end
|
2009-05-28 10:49:02 -04:00
|
|
|
|
2009-03-12 15:19:13 -04:00
|
|
|
def rewrite_options(options) #:nodoc:
|
|
|
|
if defaults = default_url_options(options)
|
|
|
|
defaults.merge(options)
|
|
|
|
else
|
|
|
|
options
|
|
|
|
end
|
|
|
|
end
|
2009-05-28 10:49:02 -04:00
|
|
|
|
2009-03-12 15:19:13 -04:00
|
|
|
def url_for(options = {})
|
|
|
|
options ||= {}
|
|
|
|
case options
|
|
|
|
when String
|
|
|
|
options
|
|
|
|
when Hash
|
|
|
|
@url.rewrite(rewrite_options(options))
|
|
|
|
else
|
|
|
|
polymorphic_url(options)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2009-05-28 10:49:02 -04:00
|
|
|
end
|