Fix setting trailing_slash: true in route definition

Ref: https://github.com/rails/rails/pull/43287
Fix: https://github.com/rails/rails/issues/44373

The `OptimizedUrlHelper` wasn't considering this option.
This commit is contained in:
Jean Boussier 2022-02-15 10:41:42 +01:00
parent 532c413e8e
commit 2d63d60fa4
3 changed files with 38 additions and 1 deletions

@ -1,3 +1,13 @@
* Fix setting `trailing_slash: true` in route definition.
```ruby
get '/test' => "test#index", as: :test, trailing_slash: true
test_path() # => "/test/"
```
*Jean Boussier*
* Make `Session#merge!` stringify keys.
Previously `Session#update` would, but `merge!` wouldn't.

@ -196,7 +196,9 @@ def initialize(route, options, route_name)
def call(t, method_name, args, inner_options, url_strategy)
if args.size == arg_size && !inner_options && optimize_routes_generation?(t)
options = t.url_options.merge @options
options[:path] = optimized_helper(args)
path = optimized_helper(args)
path << "/" if options[:trailing_slash] && !path.end_with?("/")
options[:path] = path
original_script_name = options.delete(:original_script_name)
script_name = t._routes.find_script_name(options)

@ -16,12 +16,21 @@ def index
def add_trailing_slash
render plain: url_for(trailing_slash: true, params: request.query_parameters, format: params[:format])
end
def trailing_slash_default
if params[:url]
render plain: trailing_slash_default_url(format: params[:url_format])
else
render plain: trailing_slash_default_path(format: params[:url_format])
end
end
end
Routes.draw do
get "/foo", to: "my_route_generating#index", as: :foo
get "(/optional/:optional_id)/baz", to: "my_route_generating#index", as: :baz
get "/add_trailing_slash", to: "my_route_generating#add_trailing_slash", as: :add_trailing_slash
get "/trailing_slash_default", to: "my_route_generating#trailing_slash_default", as: :trailing_slash_default, trailing_slash: true
resources :bars
@ -176,6 +185,22 @@ def app
assert_equal "http://www.example.com/add_trailing_slash.json", response.body
end
test "generating the path with `trailing_slashes: true` default options" do
get "/trailing_slash_default"
assert_equal "/trailing_slash_default/", response.body
get "/trailing_slash_default?url=1"
assert_equal "http://www.example.com/trailing_slash_default/", response.body
end
test "generating the path with `trailing_slashes: true` default options and format" do
get "/trailing_slash_default?url_format=json"
assert_equal "/trailing_slash_default.json", response.body
get "/trailing_slash_default?url=1&url_format=json"
assert_equal "http://www.example.com/trailing_slash_default.json", response.body
end
test "generating URLs with trailing slashes" do
assert_equal "/bars/", bars_path(
trailing_slash: true,