[#5563] Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...>

Lately, I've been thinking about the future of ruby

44 messages 2005/08/19
[#5564] Re: Non-overridable and non-redefinable methods — Austin Ziegler <halostatue@...> 2005/08/19

On 8/19/05, Eric Mahurin <eric_mahurin@yahoo.com> wrote:

[#5571] Re: Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...> 2005/08/19

--- Austin Ziegler <halostatue@gmail.com> wrote:

[#5574] Re: Non-overridable and non-redefinable methods — TRANS <transfire@...> 2005/08/20

Just wanted to add a few things.

[#5581] Re: Non-overridable and non-redefinable methods — Austin Ziegler <halostatue@...> 2005/08/20

On 8/19/05, TRANS <transfire@gmail.com> wrote:

[#5583] Re: Non-overridable and non-redefinable methods — "David A. Black" <dblack@...> 2005/08/20

Hi --

[#5585] Re: Non-overridable and non-redefinable methods — Eric Mahurin <eric_mahurin@...> 2005/08/20

--- "David A. Black" <dblack@wobblini.net> wrote:

[#5609] Pathname#walk for traversing path nodes (patch) — ES <ruby-ml@...>

Here is a small addition to Pathname against 1.9, probably suited

20 messages 2005/08/22

Re: Pathname#walk for traversing path nodes (patch)

From: Tanaka Akira <akr@...17n.org>
Date: 2005-08-23 03:22:39 UTC
List: ruby-core #5641
In article <43094510.6090406@magical-cat.org>,
  ES <ruby-ml@magical-cat.org> writes:

> Here is a small addition to Pathname against 1.9, probably suited
> for 1.8. Makes doing something for each node in a path easier.

> +  #  Pathname.new('/path/to/some/file.rb').walk {|dir| p dir}
> +  #     #<Pathname:/path>
> +  #     #<Pathname:/path/to>
> +  #     #<Pathname:/path/to/some>
> +  #     #<Pathname:/path/to/some/file.rb>

It seems that Pathname#walk doesn't yield the root directory.
Is it intended?  How useful/unuseful with this behavior?

Another question is about relative pathnames.

% ruby -rpathname -e 'Pathname.new("a/b/c").walk {|x| p x}'
#<Pathname:/b>
#<Pathname:/b/c>

The directory "a" doesn't appear in the result.
I think it is not intended.

Index: pathname.rb
===================================================================
RCS file: /src/ruby/lib/pathname.rb,v
retrieving revision 1.42
diff -u -p -r1.42 pathname.rb
--- pathname.rb	10 Jul 2005 15:17:18 -0000	1.42
+++ pathname.rb	23 Aug 2005 03:20:08 -0000
@@ -423,6 +423,33 @@ class Pathname
   end
 
   #
+  # Iterates over and yields a new Pathname object
+  # for each element in the given path.
+  #
+  #  Pathname.new('/path/to/some/file.rb').walk {|dir| p dir}
+  #     #<Pathname:/path>
+  #     #<Pathname:/path/to>
+  #     #<Pathname:/path/to/some>
+  #     #<Pathname:/path/to/some/file.rb>
+  #
+  def walk()
+    paths = []
+    v = self
+    if absolute?
+      until v.root?
+        paths << v
+        v = v.dirname
+      end
+    else
+      until v.to_s == '.'
+        paths << v
+        v = v.dirname
+      end
+    end
+    paths.reverse_each {|path| yield path }
+  end
+
+  #
   # Pathname#+ appends a pathname fragment to this one to produce a new Pathname
   # object.
   #
-- 
Tanaka Akira

In This Thread