Class: ActionDispatch::Routing::RouteSet::Dispatcher
- Defined in:
- actionpack/lib/action_dispatch/routing/route_set.rb
Overview
:nodoc:
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#controller(params, default_controller = true) ⇒ Object
If this is a default_controller (i.e. a controller specified by the user) we should raise an error in case it’s not found, because it usually means an user error.
-
#initialize(options = {}) ⇒ Dispatcher
constructor
A new instance of Dispatcher.
- #prepare_params!(params) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ Dispatcher
Returns a new instance of Dispatcher.
14 15 16 17 18 |
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 14 def initialize(={}) @defaults = [:defaults] @glob_param = .delete(:glob) @controllers = {} end |
Instance Method Details
#call(env) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 20 def call(env) params = env[PARAMETERS_KEY] prepare_params!(params) # Just raise undefined constant errors if a controller was specified as default. unless controller = controller(params, @defaults.key?(:controller)) return [404, {'X-Cascade' => 'pass'}, []] end dispatch(controller, params[:action], env) end |
#controller(params, default_controller = true) ⇒ Object
If this is a default_controller (i.e. a controller specified by the user) we should raise an error in case it’s not found, because it usually means an user error. However, if the controller was retrieved through a dynamic segment, as in :controller(/:action), we should simply return nil and delegate the control back to Rack cascade. Besides, if this is not a default controller, it means we should respect the @scope parameter.
43 44 45 46 47 48 49 50 |
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 43 def controller(params, default_controller=true) if params && params.key?(:controller) controller_param = params[:controller] controller_reference(controller_param) end rescue NameError => e raise ActionController::RoutingError, e., e.backtrace if default_controller end |
#prepare_params!(params) ⇒ Object
32 33 34 35 |
# File 'actionpack/lib/action_dispatch/routing/route_set.rb', line 32 def prepare_params!(params) merge_default_action!(params) split_glob_param!(params) if @glob_param end |