From d19e8f412f3cbd32842f94cba11e5c1148dfd558 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 20 Mar 2006 04:01:10 +0000 Subject: Performance speedup for ActionController (closes #4174) [Stefan Kaes] Includes caching of filter chains -- be on the lookout for problems with that! git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3989 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/base.rb | 48 ++++++++++++++------------------ 1 file changed, 21 insertions(+), 27 deletions(-) (limited to 'actionpack/lib/action_controller/base.rb') diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index afb17d7655..52bddac092 100755 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -371,13 +371,13 @@ module ActionController #:nodoc: initialize_template_class(response) assign_shortcuts(request, response) initialize_current_url - action_name(:refresh) + assign_names forget_variables_added_to_assigns log_processing send(method, *arguments) - return response + response ensure process_cleanup end @@ -469,15 +469,6 @@ module ActionController #:nodoc: self.class.controller_name end - # Returns the name of the current action - def action_name(refresh = false) - if @action_name.nil? || refresh - @action_name = (params['action'] || 'index') - end - - @action_name - end - def session_enabled? request.session_options[:disabled] != false end @@ -868,12 +859,11 @@ module ActionController #:nodoc: private def self.view_class - unless @view_class + @view_class ||= # create a new class based on the default template class and include helper methods - @view_class = Class.new(ActionView::Base) - @view_class.send(:include, master_helper_module) - end - @view_class + returning Class.new(ActionView::Base) do |view_class| + view_class.send(:include, master_helper_module) + end end def self.view_root @@ -928,6 +918,10 @@ module ActionController #:nodoc: @performed_render || @performed_redirect end + def assign_names + @action_name = (params['action'] || 'index') + end + def action_methods self.class.action_methods end @@ -997,9 +991,7 @@ module ActionController #:nodoc: end def template_exempt_from_layout?(template_name = default_template_name) - template_name.last(3) == "rjs" || @template.pick_template_extension(template_name).to_sym == :rjs - rescue - false + template_name =~ /\.rjs$/ || (@template.pick_template_extension(template_name) == :rjs rescue false) end def assert_existance_of_template_file(template_name) @@ -1010,20 +1002,22 @@ module ActionController #:nodoc: end end - def default_template_name(default_action_name = action_name) - if default_action_name - default_action_name = default_action_name.to_s.dup - strip_out_controller!(default_action_name) if template_path_includes_controller?(default_action_name) + def default_template_name(action_name = self.action_name) + if action_name + action_name = action_name.to_s + if action_name.include?('/') && template_path_includes_controller?(action_name) + action_name = strip_out_controller(action_name) + end end - "#{self.class.controller_path}/#{default_action_name}" + "#{self.class.controller_path}/#{action_name}" end - def strip_out_controller!(path) - path.replace path.split('/', 2).last + def strip_out_controller(path) + path.split('/', 2).last end def template_path_includes_controller?(path) - path.to_s['/'] && self.class.controller_path.split('/')[-1] == path.split('/')[0] + self.class.controller_path.split('/')[-1] == path.split('/')[0] end def process_cleanup -- cgit v1.2.3