aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch
diff options
context:
space:
mode:
authorwycats <wycats@gmail.com>2010-06-04 17:28:04 -0700
committerwycats <wycats@gmail.com>2010-06-04 20:11:06 -0700
commita6b39428431abeaa0251bbf4b6582e578f81783f (patch)
treea85e09146a4e046cc69485df35c6b5bcea0bef8e /actionpack/lib/action_dispatch
parent16ee4b4d1b125bd3edb5c191d58c7afdf6d3232e (diff)
downloadrails-a6b39428431abeaa0251bbf4b6582e578f81783f.tar.gz
rails-a6b39428431abeaa0251bbf4b6582e578f81783f.tar.bz2
rails-a6b39428431abeaa0251bbf4b6582e578f81783f.zip
Optimize LookupContext
Diffstat (limited to 'actionpack/lib/action_dispatch')
-rw-r--r--actionpack/lib/action_dispatch/routing/route_set.rb13
1 files changed, 10 insertions, 3 deletions
diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb
index 5c4c96d9fc..750912b251 100644
--- a/actionpack/lib/action_dispatch/routing/route_set.rb
+++ b/actionpack/lib/action_dispatch/routing/route_set.rb
@@ -12,6 +12,7 @@ module ActionDispatch
def initialize(options={})
@defaults = options[:defaults]
@glob_param = options.delete(:glob)
+ @controllers = {}
end
def call(env)
@@ -32,9 +33,15 @@ module ActionDispatch
end
def controller(params, raise_error=true)
- if params && params.has_key?(:controller)
- controller = "#{params[:controller].camelize}Controller"
- ActiveSupport::Inflector.constantize(controller)
+ if params && params.key?(:controller)
+ controller_param = params[:controller]
+ unless controller = @controllers[controller_param]
+ controller_name = "#{controller_param.camelize}Controller"
+ controller = @controllers[controller_param] =
+ ActiveSupport::Dependencies.ref(controller_name)
+ end
+
+ controller.get
end
rescue NameError => e
raise ActionController::RoutingError, e.message, e.backtrace if raise_error