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.
# File actionpack/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