# Pathname2 1.5.1

**URL:** <https://www.ruby-forum.com/t/pathname2-1-5-1/66752>\
**Category:** Ruby\
**Created:** [August 28, 2006, 11:46pm UTC](https://www.ruby-forum.com/t/pathname2-1-5-1/66752 "2006-08-28T23:46:55Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![danielb](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/c57346/32.png) [@danielb](https://www.ruby-forum.com/u/danielb)\
**Post date:** [August 28, 2006, 11:46pm UTC](https://www.ruby-forum.com/t/pathname2-1-5-1/66752/1 "2006-08-28T23:46:55Z")

</div>

Hi all,

I’m happy to announce the release of pathname2 1.5.1.

# What is it?

An alternate implementation of the Pathname class.

# What’s new?

This release adds the Kernel#pn method as a shortcut for Pathname.new,  
as well  
as an ‘/’ alias for the ‘+’ method. It also fixes a bug with  
Pathname#realpath  
and symbolic links.

# Where is it?

You can find it on the RAA or RubyForge (part of the Shards project).  
You can  
also install it via gems.

# What’s the difference between your version and the one in the stdlib?

- It is a subclass of String (and thus, mixes in Enumerable).

- It has sensical to\_a and root instance methods.

- It works on Windows and Unix. The current implementation does not  
work with  
Windows path names very well (e.g. Pathname#realpath, Pathname#parent),  
and not  
at all when it comes to UNC paths.

- The Pathname#cleanpath method works differently - it always returns a  
canonical pathname. In addition, there is no special consideration for  
symlinks (yet, though I’m not sure how important this really is).

- The Pathname#+ method auto cleans.

- It uses a facade for all File and Dir methods, as well as all ftools  
methods  
and most FileUtils methods.

- Pathname#clean works slightly differently. In the stdlib version,  
Pathname#clean("…/a") returns “…/a”. In this version, it returns “a”.  
This  
affects other methods, such as Pathname#relative\_path\_from.

- Accepts file urls and converts them to paths automatically, e.g.  
file:///foo%20bar/baz becomes ‘/foo bar/baz’.

- Adds a Kernel level +pn+ method as a shortcut.

- Allows you to add paths together with the ‘/’ operator.

- Provides an implementation in C if you desperately need speed (though  
the gem  
installs the pure Ruby version only).

# Some benchmarks for your amusement

- Pure Ruby  
user system total real  
Pathname.new(path) 0.640000 0.110000 0.750000 ( 0.779167)  
Pathname#+(Pathname) 8.970000 1.370000 10.340000 ( 10.834968)  
Pathname#+(String) 9.060000 1.370000 10.430000 ( 15.592133)  
Pathname#children 11.520000 2.670000 14.190000 ( 19.733709)  
Pathname#pstrip 1.010000 0.160000 1.170000 ( 1.194300)  
Pathname#pstrip! 0.250000 0.100000 0.350000 ( 0.340941)  
Pathname#to\_a 0.590000 0.100000 0.690000 ( 0.697782)  
Pathname#descend 8.470000 1.540000 10.010000 ( 11.796088)  
Pathname#ascend 11.990000 1.590000 13.580000 ( 15.250620)  
Pathname#root 0.910000 0.160000 1.070000 ( 1.126409)  
Pathname#root? 1.000000 0.200000 1.200000 ( 1.250843)  
Pathname#\<=\> 0.180000 0.090000 0.270000 ( 0.298482)  
Pathname#absolute? 1.070000 0.240000 1.310000 ( 1.359826)  
Pathname#relative? 1.020000 0.200000 1.220000 ( 1.271063)  
Pathname#clean 5.460000 1.150000 6.610000 ( 6.839555)  
Pathname#clean! 13.770000 1.980000 15.750000 ( 16.293503)  
Pathname#realpath 11.670000 2.400000 14.070000 ( 14.590873)

- C extension  
user system total real  
Pathname.new(path) 0.160000 0.050000 0.210000 ( 0.236884)  
Pathname#+(Pathname) 2.360000 0.070000 2.430000 ( 2.561718)  
Pathname#+(String) 2.340000 0.070000 2.410000 ( 2.508076)  
Pathname#children 4.400000 1.240000 5.640000 ( 5.757893)  
Pathname#pstrip 0.220000 0.050000 0.270000 ( 0.288802)  
Pathname#pstrip! 0.060000 0.050000 0.110000 ( 0.127524)  
Pathname#to\_a 0.490000 0.050000 0.540000 ( 0.570622)  
Pathname#descend 1.850000 0.110000 1.960000 ( 2.050105)  
Pathname#ascend 2.270000 0.100000 2.370000 ( 2.436976)  
Pathname#root 0.270000 0.050000 0.320000 ( 0.325671)  
Pathname#root? 0.260000 0.060000 0.320000 ( 0.342852)  
Pathname#\<=\> 0.090000 0.040000 0.130000 ( 0.158385)  
Pathname#absolute? 0.270000 0.060000 0.330000 ( 0.349167)  
Pathname#relative? 0.260000 0.050000 0.310000 ( 0.329822)  
Pathname#clean 1.350000 0.060000 1.410000 ( 1.456711)  
Pathname#clean! 1.070000 0.060000 1.130000 ( 1.192618)  
Pathname#realpath 0.290000 0.320000 0.610000 ( 0.629255)

Enjoy!

- Dan

This communication is the property of Qwest and may contain confidential  
or  
privileged information. Unauthorized use of this communication is  
strictly  
prohibited and may be unlawful. If you have received this communication  
in error, please immediately notify the sender by reply e-mail and  
destroy  
all copies of the communication and any attachments.
