filesystem/directory_for_descriptor_no_parens.rb

tests/_examples/filesystem/directory_for_descriptor_no_parens.rb in the metorex repository.

# A Dir made over a descriptor another Dir holds reads the same directory,
# has no path, and refuses a descriptor that names no directory.
require "tmpdir"

Dir.mktmpdir do |root|
  File.write File.join(root, "notes.txt"), ""
  Dir.mkdir File.join(root, "archive")
  opened = Dir.new root
  adopted = Dir.for_fd opened.fileno
  p adopted.children.sort
  p adopted.path
  p adopted.fileno == opened.fileno
  opened.close
end

begin
  Dir.for_fd nil
rescue TypeError => error
  puts error.message
end

begin
  Dir.for_fd -1
rescue SystemCallError => error
  puts error.message
end

begin
  Dir.for_fd $stdout.fileno
rescue SystemCallError => error
  puts error.message
end

Output:

["archive", "notes.txt"]
nil
true
no implicit conversion from nil to integer
Bad file descriptor - fdopendir
Not a directory - fdopendir