[前][次][番号順一覧][スレッド一覧]

ruby-changes:38816

From: akr <ko1@a...>
Date: Mon, 15 Jun 2015 00:15:18 +0900 (JST)
Subject: [ruby-changes:38816] akr:r50897 (trunk): * ext/pathname/lib/pathname.rb (descend): Blockless form supported.

akr	2015-06-15 00:14:46 +0900 (Mon, 15 Jun 2015)

  New Revision: 50897

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=50897

  Log:
    * ext/pathname/lib/pathname.rb (descend): Blockless form supported.
      (ascend): Ditto.
      [ruby-core:68820] [Feature #11052] Patch by Piotr Szotkowski.

  Modified files:
    trunk/ChangeLog
    trunk/NEWS
    trunk/ext/pathname/lib/pathname.rb
    trunk/test/pathname/test_pathname.rb
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 50896)
+++ ChangeLog	(revision 50897)
@@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
+Mon Jun 15 00:14:33 2015  Tanaka Akira  <akr@f...>
+
+	* ext/pathname/lib/pathname.rb (descend): Blockless form supported.
+	  (ascend): Ditto.
+	  [ruby-core:68820] [Feature #11052] Patch by Piotr Szotkowski.
+
 Sun Jun 14 20:09:25 2015  Tanaka Akira  <akr@f...>
 
 	* time.c (time_getlocaltime): [DOC] Add examples of valid utc_offset
Index: ext/pathname/lib/pathname.rb
===================================================================
--- ext/pathname/lib/pathname.rb	(revision 50896)
+++ ext/pathname/lib/pathname.rb	(revision 50897)
@@ -278,9 +278,17 @@ class Pathname https://github.com/ruby/ruby/blob/trunk/ext/pathname/lib/pathname.rb#L278
   #     #<Pathname:path/to/some>
   #     #<Pathname:path/to/some/file.rb>
   #
+  # Returns an Enumerator if no block was given.
+  #
+  #   enum = Pathname.new("/usr/bin/ruby").descend
+  #     # ... do stuff ...
+  #   enum.each { |e| ... }
+  #     # yields Pathnames /, /usr, /usr/bin, and /usr/bin/ruby.
+  #
   # It doesn't access the filesystem.
   #
   def descend
+    return to_enum(__method__) unless block_given?
     vs = []
     ascend {|v| vs << v }
     vs.reverse_each {|v| yield v }
@@ -303,9 +311,17 @@ class Pathname https://github.com/ruby/ruby/blob/trunk/ext/pathname/lib/pathname.rb#L311
   #     #<Pathname:path/to>
   #     #<Pathname:path>
   #
+  # Returns an Enumerator if no block was given.
+  #
+  #   enum = Pathname.new("/usr/bin/ruby").ascend
+  #     # ... do stuff ...
+  #   enum.each { |e| ... }
+  #     # yields Pathnames /usr/bin/ruby, /usr/bin, /usr, and /.
+  #
   # It doesn't access the filesystem.
   #
   def ascend
+    return to_enum(__method__) unless block_given?
     path = @path
     yield self
     while r = chop_basename(path)
Index: NEWS
===================================================================
--- NEWS	(revision 50896)
+++ NEWS	(revision 50897)
@@ -78,6 +78,10 @@ with all sufficient information, see the https://github.com/ruby/ruby/blob/trunk/NEWS#L78
   * OpenSSL::SSL::SSLSocket#accept_nonblock and
     OpenSSL::SSL::SSLSocket#connect_nonblock supports `exception: false`.
 
+* Pathname
+  * Pathname#descend and Pathname#ascend supported blockless form.
+    [Feature #11052]
+
 * io/wait
   * IO#wait_readable no longer checks FIONREAD, it may be used for
     non-bytestream IO such as listen sockets.
Index: test/pathname/test_pathname.rb
===================================================================
--- test/pathname/test_pathname.rb	(revision 50896)
+++ test/pathname/test_pathname.rb	(revision 50897)
@@ -430,7 +430,7 @@ class TestPathname < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/test/pathname/test_pathname.rb#L430
   end
 
   def descend(path)
-    Pathname.new(path).enum_for(:descend).map {|v| v.to_s }
+    Pathname.new(path).descend.map(&:to_s)
   end
 
   defassert(:descend, %w[/ /a /a/b /a/b/c], "/a/b/c")
@@ -439,7 +439,7 @@ class TestPathname < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/test/pathname/test_pathname.rb#L439
   defassert(:descend, %w[a/], "a/")
 
   def ascend(path)
-    Pathname.new(path).enum_for(:ascend).map {|v| v.to_s }
+    Pathname.new(path).ascend.map(&:to_s)
   end
 
   defassert(:ascend, %w[/a/b/c /a/b /a /], "/a/b/c")
@@ -447,6 +447,14 @@ class TestPathname < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/test/pathname/test_pathname.rb#L447
   defassert(:ascend, %w[./a/b/c ./a/b ./a .], "./a/b/c")
   defassert(:ascend, %w[a/], "a/")
 
+  def test_blockless_ascend_is_enumerator
+    assert_kind_of(Enumerator, Pathname.new('a').ascend)
+  end
+
+  def test_blockless_descend_is_enumerator
+    assert_kind_of(Enumerator, Pathname.new('a').descend)
+  end
+
   def test_initialize
     p1 = Pathname.new('a')
     assert_equal('a', p1.to_s)

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]