1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

skip dealing with params if none are provided

This lets us avoid

1. A slow call to Hash#slice
2. An is_a? test
3. Extra hash allocations (from slice)
4. String allocations

etc.
This commit is contained in:
Aaron Patterson 2014-05-09 17:31:13 -07:00
parent 73a7b52f01
commit dbb0bd8f3a

View file

@ -33,10 +33,8 @@ module ActionDispatch
path = options[:script_name].to_s.chomp("/")
path << options[:path].to_s
params = options[:params].is_a?(Hash) ? options[:params] : options.slice(:params)
params.reject! { |_,v| v.to_param.nil? }
result = build_host_url(options)
if options[:trailing_slash]
if path.include?('?')
result << path.sub(/\?/, '/\&')
@ -46,7 +44,16 @@ module ActionDispatch
else
result << path
end
result << "?#{params.to_query}" unless params.empty?
if options.key? :params
params = options[:params].is_a?(Hash) ?
options[:params] :
{ params: options[:params] }
params.reject! { |_,v| v.to_param.nil? }
result << "?#{params.to_query}" unless params.empty?
end
result << "##{Journey::Router::Utils.escape_fragment(options[:anchor].to_param.to_s)}" if options[:anchor]
result
end