aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/base/url_for.rb
diff options
context:
space:
mode:
authorYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-15 11:44:45 -0700
committerYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-15 11:44:45 -0700
commita63caa4c0c2a8aabc13c354a9193ebd9c5e8ba73 (patch)
tree3d90ed4e56055eb4f4a7b7760321007586b3c87c /actionpack/lib/action_controller/base/url_for.rb
parent614374b3e5b19b737175a82c6dad2f146800eef1 (diff)
downloadrails-a63caa4c0c2a8aabc13c354a9193ebd9c5e8ba73.tar.gz
rails-a63caa4c0c2a8aabc13c354a9193ebd9c5e8ba73.tar.bz2
rails-a63caa4c0c2a8aabc13c354a9193ebd9c5e8ba73.zip
Get tests to run (with failures) without old base around
Diffstat (limited to 'actionpack/lib/action_controller/base/url_for.rb')
-rw-r--r--actionpack/lib/action_controller/base/url_for.rb49
1 files changed, 49 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/base/url_for.rb b/actionpack/lib/action_controller/base/url_for.rb
new file mode 100644
index 0000000000..7119c14cd3
--- /dev/null
+++ b/actionpack/lib/action_controller/base/url_for.rb
@@ -0,0 +1,49 @@
+module ActionController
+ module UrlFor
+ extend ActiveSupport::Concern
+
+ include RackConvenience
+
+ def process_action(*)
+ initialize_current_url
+ super
+ end
+
+ 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
+
+ def rewrite_options(options) #:nodoc:
+ if defaults = default_url_options(options)
+ defaults.merge(options)
+ else
+ options
+ end
+ end
+
+ def url_for(options = {})
+ options ||= {}
+ case options
+ when String
+ options
+ when Hash
+ @url.rewrite(rewrite_options(options))
+ else
+ polymorphic_url(options)
+ end
+ end
+ end
+end