Make sure assert_recognizes can still find routes mounted after engines

Before, if the application defined after an engine this method would not
recognize the route since it was not defined insdie the engine.
上级 b6c20f2c
......@@ -855,7 +855,7 @@ def recognize_path(path, environment = {})
recognize_path_with_request(req, path, extras)
end
def recognize_path_with_request(req, path, extras)
def recognize_path_with_request(req, path, extras, raise_on_missing: true)
@router.recognize(req) do |route, params|
params.merge!(extras)
params.each do |key, value|
......@@ -875,12 +875,14 @@ def recognize_path_with_request(req, path, extras)
return req.path_parameters
elsif app.matches?(req) && app.engine?
path_parameters = app.rack_app.routes.recognize_path_with_request(req, path, extras)
return path_parameters
path_parameters = app.rack_app.routes.recognize_path_with_request(req, path, extras, raise_on_missing: false)
return path_parameters if path_parameters
end
end
raise ActionController::RoutingError, "No route matches #{path.inspect}"
if raise_on_missing
raise ActionController::RoutingError, "No route matches #{path.inspect}"
end
end
end
# :startdoc:
......
......@@ -52,6 +52,8 @@ def self.name
end
mount engine => "/shelf"
get "/shelf/foo", controller: "query_articles", action: "index"
end
end
......@@ -154,6 +156,10 @@ def test_assert_recognizes_raises_message_with_engine
assert_match err.message, "This is a really bad msg"
end
def test_assert_recognizes_continue_to_recoginize_after_it_tried_engines
assert_recognizes({ controller: "query_articles", action: "index" }, "/shelf/foo")
end
def test_assert_routing
assert_routing("/articles", controller: "articles", action: "index")
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册