filesystem/stream_paths/coercion_parens.rb

tests/_examples/filesystem/stream_paths/coercion_parens.rb in the metorex repository.

# A path may arrive as anything that names one, and a predicate takes a
# stream as the file it is open on.
class Path
  def initialize(name)
    @name = name
  end

  def to_path
    @name
  end
end

class Stream
  def to_io
    STDIN
  end
end

p(File.directory?(Path.new("/tmp")))
p(FileTest.directory?(Path.new("/tmp")))
p(File.directory?(Stream.new))

target = "/tmp/metorex_stream_paths_parens_target.txt"
link = "/tmp/metorex_stream_paths_parens_link.txt"
File.write(target, "held")
File.delete(link) if File.symlink?(link)
File.symlink(Path.new(target), Path.new(link))
p(File.symlink?(link))
p(File.read(link))
File.delete(link)
File.delete(target)

Output:

true
true
false
true
"held"