aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2012-03-02 06:56:40 -0800
committerJosé Valim <jose.valim@gmail.com>2012-03-02 06:56:40 -0800
commit1a046ab9bf7f0c3fa045a2b771a5a22d318f02ff (patch)
treef3694b72ccc15888a9c32910b1dc92a42a6f762e /actionpack/lib/action_view
parentaeeebe1fdca56d20a9950f5585d10f8089388278 (diff)
parentcd5dabab95924dfaf3af8c429454f1a46d9665c1 (diff)
downloadrails-1a046ab9bf7f0c3fa045a2b771a5a22d318f02ff.tar.gz
rails-1a046ab9bf7f0c3fa045a2b771a5a22d318f02ff.tar.bz2
rails-1a046ab9bf7f0c3fa045a2b771a5a22d318f02ff.zip
Merge pull request #5242 from rails/opt_routes
Optimize routes generation in simple cases. If you pass to the route helper the same amount of arguments as the required segments, route generation will be optimized as a string interpolation. After this commit, `post_path(post)` is about 6.5 times faster, `post_url(post)` is about 5 times.
Diffstat (limited to 'actionpack/lib/action_view')
-rw-r--r--actionpack/lib/action_view/helpers/url_helper.rb23
1 files changed, 14 insertions, 9 deletions
diff --git a/actionpack/lib/action_view/helpers/url_helper.rb b/actionpack/lib/action_view/helpers/url_helper.rb
index 8d7417809b..f4946e65b5 100644
--- a/actionpack/lib/action_view/helpers/url_helper.rb
+++ b/actionpack/lib/action_view/helpers/url_helper.rb
@@ -23,20 +23,25 @@ module ActionView
include ActionDispatch::Routing::UrlFor
include TagHelper
- def _routes_context
- controller
- end
+ # We need to override url_optoins, _routes_context
+ # and optimize_routes_generation? to consider the controller.
- # Need to map default url options to controller one.
- # def default_url_options(*args) #:nodoc:
- # controller.send(:default_url_options, *args)
- # end
- #
- def url_options
+ def url_options #:nodoc:
return super unless controller.respond_to?(:url_options)
controller.url_options
end
+ def _routes_context #:nodoc:
+ controller
+ end
+ protected :_routes_context
+
+ def optimize_routes_generation? #:nodoc:
+ controller.respond_to?(:optimize_routes_generation?) ?
+ controller.optimize_routes_generation? : super
+ end
+ protected :optimize_routes_generation?
+
# Returns the URL for the set of +options+ provided. This takes the
# same options as +url_for+ in Action Controller (see the
# documentation for <tt>ActionController::Base#url_for</tt>). Note that by default