Class: ActionDispatch::Journey::Router
- Inherits:
-
Object
- Object
- ActionDispatch::Journey::Router
- Defined in:
- lib/action_dispatch/journey/router.rb,
lib/action_dispatch/journey/router/utils.rb,
lib/action_dispatch/journey/router/strexp.rb
Overview
:nodoc:
Defined Under Namespace
Classes: NullReq, RoutingError, Strexp, Utils
Constant Summary collapse
- VERSION =
:nodoc:
'2.0.0'
- RouteSet =
ActionDispatch::Journey::Router
- RegexpWithNamedGroups =
ActionDispatch::Journey::Path::Pattern
Instance Attribute Summary collapse
-
#formatter ⇒ Object
readonly
Returns the value of attribute formatter.
-
#request_class ⇒ Object
readonly
Returns the value of attribute request_class.
-
#routes ⇒ Object
Returns the value of attribute routes.
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(routes, options) ⇒ Router
constructor
A new instance of Router.
- #recognize(req) ⇒ Object
- #visualizer ⇒ Object
Constructor Details
Instance Attribute Details
#formatter ⇒ Object (readonly)
Returns the value of attribute formatter.
46 47 48 |
# File 'lib/action_dispatch/journey/router.rb', line 46 def formatter @formatter end |
#request_class ⇒ Object (readonly)
Returns the value of attribute request_class.
46 47 48 |
# File 'lib/action_dispatch/journey/router.rb', line 46 def request_class @request_class end |
#routes ⇒ Object
Returns the value of attribute routes.
47 48 49 |
# File 'lib/action_dispatch/journey/router.rb', line 47 def routes @routes end |
Instance Method Details
#call(env) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/action_dispatch/journey/router.rb', line 56 def call(env) env['PATH_INFO'] = Utils.normalize_path(env['PATH_INFO']) find_routes(env).each do |match, parameters, route| script_name, path_info, set_params = env.values_at('SCRIPT_NAME', 'PATH_INFO', @params_key) unless route.path.anchored env['SCRIPT_NAME'] = (script_name.to_s + match.to_s).chomp('/') env['PATH_INFO'] = match.post_match end env[@params_key] = (set_params || {}).merge parameters status, headers, body = route.app.call(env) if 'pass' == headers['X-Cascade'] env['SCRIPT_NAME'] = script_name env['PATH_INFO'] = path_info env[@params_key] = set_params next end return [status, headers, body] end return [404, {'X-Cascade' => 'pass'}, ['Not Found']] end |
#recognize(req) ⇒ Object
86 87 88 89 90 91 92 93 94 95 |
# File 'lib/action_dispatch/journey/router.rb', line 86 def recognize(req) find_routes(req.env).each do |match, parameters, route| unless route.path.anchored req.env['SCRIPT_NAME'] = match.to_s req.env['PATH_INFO'] = match.post_match.sub(/^([^\/])/, '/\1') end yield(route, nil, parameters) end end |
#visualizer ⇒ Object
97 98 99 100 101 102 |
# File 'lib/action_dispatch/journey/router.rb', line 97 def visualizer tt = GTG::Builder.new(ast).transition_table groups = partitioned_routes.first.map(&:ast).group_by { |a| a.to_s } asts = groups.values.map { |v| v.first } tt.visualizer(asts) end |