diff options
author | wycats <wycats@gmail.com> | 2010-06-04 17:28:04 -0700 |
---|---|---|
committer | wycats <wycats@gmail.com> | 2010-06-04 20:11:06 -0700 |
commit | a6b39428431abeaa0251bbf4b6582e578f81783f (patch) | |
tree | a85e09146a4e046cc69485df35c6b5bcea0bef8e /actionpack/lib/action_dispatch/routing | |
parent | 16ee4b4d1b125bd3edb5c191d58c7afdf6d3232e (diff) | |
download | rails-a6b39428431abeaa0251bbf4b6582e578f81783f.tar.gz rails-a6b39428431abeaa0251bbf4b6582e578f81783f.tar.bz2 rails-a6b39428431abeaa0251bbf4b6582e578f81783f.zip |
Optimize LookupContext
Diffstat (limited to 'actionpack/lib/action_dispatch/routing')
-rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 13 |
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 |