Method: ActionDispatch::Routing::Mapper.normalize_path

Defined in:
actionpack/lib/action_dispatch/routing/mapper.rb

.normalize_path(path) ⇒ Object

Invokes Journey::Router::Utils.normalize_path, then ensures that /(:locale) becomes (/:locale). Except for root cases, where the former is the correct one.



397
398
399
400
401
402
403
404
405
406
407
408
409
410
# File 'actionpack/lib/action_dispatch/routing/mapper.rb', line 397

def self.normalize_path(path)
  path = Journey::Router::Utils.normalize_path(path)

  # the path for a root URL at this point can be something like
  # "/(/:locale)(/:platform)/(:browser)", and we would want
  # "/(:locale)(/:platform)(/:browser)" reverse "/(", "/((" etc to "(/", "((/" etc
  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. 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