Skip to content
Permalink
Browse files

* ext/pathname/lib/pathname.rb (descend): Blockless form supported.

  (ascend): Ditto.
  [ruby-core:68820] [Feature #11052] Patch by Piotr Szotkowski.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50897 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information...
akr committed Jun 14, 2015
1 parent 16917fa commit 8bb581f8dd4eeb0e3e784488f3c8d102df9327c3
Showing with 36 additions and 2 deletions.
  1. +6 −0 ChangeLog
  2. +4 −0 NEWS
  3. +16 −0 ext/pathname/lib/pathname.rb
  4. +10 −2 test/pathname/test_pathname.rb
@@ -1,3 +1,9 @@
Mon Jun 15 00:14:33 2015 Tanaka Akira <akr@fsij.org>

* 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@fsij.org>

* time.c (time_getlocaltime): [DOC] Add examples of valid utc_offset
4 NEWS
@@ -78,6 +78,10 @@ with all sufficient information, see the ChangeLog file.
* 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.
@@ -278,9 +278,17 @@ def each_filename # :yield: filename
# #<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 @@ def descend
# #<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)
@@ -430,7 +430,7 @@ def test_realdirpath
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,14 +439,22 @@ def descend(path)
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")
defassert(:ascend, %w[a/b/c a/b a], "a/b/c")
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)

0 comments on commit 8bb581f

Please sign in to comment.
You can’t perform that action at this time.