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 more...
Overview
:nodoc:
Defined Under Namespace
Classes: Utils
Instance Attribute Summary collapse
-
#routes ⇒ Object
Returns the value of attribute routes.
Instance Method Summary collapse
- #eager_load! ⇒ Object
-
#initialize(routes) ⇒ Router
constructor
A new instance of Router.
- #recognize(rails_req) ⇒ Object
- #serve(req) ⇒ Object
- #visualizer ⇒ Object
Constructor Details
#initialize(routes) ⇒ Router
Returns a new instance of Router.
20 21 22 |
# File 'lib/action_dispatch/journey/router.rb', line 20 def initialize(routes) @routes = routes end |
Instance Attribute Details
#routes ⇒ Object
Returns the value of attribute routes.
18 19 20 |
# File 'lib/action_dispatch/journey/router.rb', line 18 def routes @routes end |
Instance Method Details
#eager_load! ⇒ Object
[View source]
24 25 26 27 28 29 |
# File 'lib/action_dispatch/journey/router.rb', line 24 def eager_load! # Eagerly trigger the simulator's initialization so # it doesn't happen during a request cycle. simulator nil end |
#recognize(rails_req) ⇒ Object
[View source]
64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/action_dispatch/journey/router.rb', line 64 def recognize(rails_req) find_routes(rails_req).each do |match, parameters, route| unless route.path.anchored rails_req.script_name = match.to_s rails_req.path_info = match.post_match.sub(/^([^\/])/, '/\1') end parameters = route.defaults.merge parameters yield(route, parameters) end end |
#serve(req) ⇒ Object
[View source]
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/action_dispatch/journey/router.rb', line 31 def serve(req) find_routes(req).each do |match, parameters, route| set_params = req.path_parameters path_info = req.path_info script_name = req.script_name unless route.path.anchored req.script_name = (script_name.to_s + match.to_s).chomp("/") req.path_info = match.post_match req.path_info = "/" + req.path_info unless req.path_info.start_with? "/" end parameters = route.defaults.merge parameters.transform_values { |val| val.dup.force_encoding(::Encoding::UTF_8) } req.path_parameters = set_params.merge parameters status, headers, body = route.app.serve(req) if "pass" == headers["X-Cascade"] req.script_name = script_name req.path_info = path_info req.path_parameters = set_params next end return [status, headers, body] end [404, { "X-Cascade" => "pass" }, ["Not Found"]] end |
#visualizer ⇒ Object
[View source]
76 77 78 79 80 81 |
# File 'lib/action_dispatch/journey/router.rb', line 76 def visualizer tt = GTG::Builder.new(ast).transition_table groups = partitioned_routes.first.map(&:ast).group_by(&:to_s) asts = groups.values.map(&:first) tt.visualizer(asts) end |