未验证 提交 fa292703 编写于 作者: A Aaron Patterson 提交者: GitHub

Merge pull request #37075 from woahdae/fix-multiple-choice-route-options

 Fix route from "(:a)(foo/:b)" when only given :b
......@@ -412,7 +412,9 @@ def self.normalize_path(path)
path.gsub!(%r{/(\(+)/?}, '\1/')
# if a path is all optional segments, change the leading "(/" back to
# "/(" so it evaluates to "/" when interpreted with no options.
path.sub!(%r{^(\(+)/}, '/\1') if %r{^(\(+[^)]+\)){1,}$}.match?(path)
# Unless, however, at least one secondary segment consists of a static
# part, ex. "(/:locale)(/pages/:page)"
path.sub!(%r{^(\(+)/}, '/\1') if %r{^(\(+[^)]+\))(\(+/:[^)]+\))*$}.match?(path)
path
end
......
......@@ -1412,6 +1412,53 @@ def test_optional_scoped_root_hierarchy
assert_equal "projects#index", @response.body
end
def test_optional_scoped_root_multiple_choice
draw do
scope "(:locale)" do
scope "(p/:platform)" do
scope "(b/:browser)" do
root to: "projects#index"
end
end
end
end
# Note, in this particular case where we rely on pattern matching instead
# of hierarchy to match parameters in a root path, root_path returns ""
# when given no path parameters.
assert_equal "/en", root_path(locale: "en")
assert_equal "/p/osx", root_path(platform: "osx")
assert_equal "/en/p/osx", root_path(locale: "en", platform: "osx")
assert_equal "/b/chrome", root_path(browser: "chrome")
assert_equal "/en/b/chrome", root_path(locale: "en", browser: "chrome")
assert_equal "/p/osx/b/chrome",
root_path(platform: "osx", browser: "chrome")
assert_equal "/en/p/osx/b/chrome",
root_path(locale: "en", platform: "osx", browser: "chrome")
get "/en"
assert_equal "projects#index", @response.body
get "/p/osx"
assert_equal "projects#index", @response.body
get "/en/p/osx"
assert_equal "projects#index", @response.body
get "/b/chrome"
assert_equal "projects#index", @response.body
get "/en/b/chrome"
assert_equal "projects#index", @response.body
get "/p/osx/b/chrome"
assert_equal "projects#index", @response.body
get "/en/p/osx/b/chrome"
assert_equal "projects#index", @response.body
end
def test_scope_with_format_option
draw do
get "direct/index", as: :no_format_direct, format: false
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册