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 85 86 |
# 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('/') path_info = match.post_match env['PATH_INFO'] = path_info env['PATH_INFO'] = "/" + path_info unless path_info.start_with? "/" 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
88 89 90 91 92 93 94 95 96 97 |
# File 'lib/action_dispatch/journey/router.rb', line 88 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
99 100 101 102 103 104 |
# File 'lib/action_dispatch/journey/router.rb', line 99 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 |