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/