Method: ActionController::Routing.normalize_paths

Defined in:
lib/action_controller/routing.rb

.normalize_paths(paths) ⇒ Object

Returns an array of paths, cleaned of double-slashes and relative path references.

  • “\" and ”//“ become ”\“ or ”/“.

  • “/foo/bar/../config” becomes “/foo/config”.

The returned array is sorted by length, descending.



302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
# File 'lib/action_controller/routing.rb', line 302

def normalize_paths(paths)
  # do the hokey-pokey of path normalization...
  paths = paths.collect do |path|
    path = path.
      gsub("//", "/").           # replace double / chars with a single
      gsub("\\\\", "\\").        # replace double \ chars with a single
      gsub(%r{(.)[\\/]$}, '\1')  # drop final / or \ if path ends with it

    # eliminate .. paths where possible
    re = %r{[^/\\]+[/\\]\.\.[/\\]}
    path.gsub!(re, "") while path.match(re)
    path
  end

  # start with longest path, first
  paths = paths.uniq.sort_by { |path| - path.length }
end