Performance fix for Pathname#chop_basename

This is an internal method, but is called a bunch of times in
performance-critical codepaths, and is ultra slow because the constant
is interpoplated into the Regexp each time the method is called.

Alas, this has been fixed in Ruby 1.9+.
This commit is contained in:
Jack Nagel 2013-04-14 21:50:57 -05:00
parent 1bad199776
commit 5e9cfec8b8

View File

@ -386,6 +386,18 @@ class Pathname
end
end
if RUBY_VERSION <= "1.8.7"
alias_method :old_chop_basename, :chop_basename
def chop_basename(path)
base = File.basename(path)
if /\A#{Pathname::SEPARATOR_PAT}?\z/o =~ base
return nil
else
return path[0, path.rindex(base)], base
end
end
private :chop_basename
end
end
# sets $n and $d so you can observe creation of stuff