Map the path according to the given specification. The specification controls the details of the mapping. The following special patterns are recognized:
-
%p â The complete path.
-
%f â The base file name of the path, with its file extension, but without any directories.
-
%n â The file name of the path without its file extension.
-
%d â The directory list of the path.
-
%x â The file extension of the path. An empty string if there is no extension.
-
%X â Everything but the file extension.
-
%s â The alternate file separator if defined, otherwise use the standard file separator.
-
%% â A percent sign.
The %d specifier can also have a numeric prefix (e.g. '%2d'). If
the number is positive, only return (up to) n
directories in
the path, starting from the left hand side. If n
is negative,
return (up to) |n
| directories from the right hand side of the
path.
Examples:
'a/b/c/d/file.txt'.pathmap("%2d") => 'a/b' 'a/b/c/d/file.txt'.pathmap("%-2d") => 'c/d'
Also the %d, %p, %f, %n, %x, and %X operators can take a pattern/replacement argument to perform simple string substitutions on a particular part of the path. The pattern and replacement are separated by a comma and are enclosed by curly braces. The replacement spec comes after the % character but before the operator letter. (e.g. â%{old,new}dâ). Multiple replacement specs should be separated by semi-colons (e.g. â%{old,new;src,bin}dâ).
Regular expressions may be used for the pattern, and back refs may be used in the replacement text. Curly braces, commas and semi-colons are excluded from both the pattern and replacement text (let's keep parsing reasonable).
For example:
"src/org/onestepback/proj/A.java".pathmap("%{^src,bin}X.class")
returns:
"bin/org/onestepback/proj/A.class"
If the replacement text is '*', then a block may be provided to perform some arbitrary calculation for the replacement.
For example:
"/path/to/file.TXT".pathmap("%X%{.*,*}x") { |ext| ext.downcase }
Returns:
"/path/to/file.txt"
Please login to continue.