filesystem/permission_bits_parens.rb
tests/_examples/filesystem/permission_bits_parens.rb in the metorex repository.
# `chmod` sets the permission bits through a name or through an open handle,
# and a name that is not there raises.
require "tmpdir"
Dir.mktmpdir do |scratch|
named = File.join(scratch, "notes.txt")
File.write(named, "hello")
p(File.chmod(0o444, named))
p(format("%o", File.stat(named).mode & 0o777))
handle = File.open(named, "r")
p(handle.chmod(0o600))
p(format("%o", File.stat(named).mode & 0o777))
handle.close
begin
File.chmod(0o644, File.join(scratch, "missing.txt"))
rescue Errno::ENOENT => problem
puts(problem.class)
end
begin
File.chmod(2**64, named)
rescue RangeError => problem
puts(problem.class)
end
end
Output:
1
"444"
0
"600"
Errno::ENOENT
RangeError