This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Checking Your Access to a File
CodeExpectedActual
File.readable?('/bin/ls')
true true
File.readable?('/etc/passwd-')
false false
filename = 'test_file'
File.open(filename, 'w') {}
File.writable?(filename)
true true
File.writable?('/bin/ls')
false false
File.executable?('/bin/ls')
true true
File.executable?(filename)
false false
File.owned? 'test_file'
true true
File.grpowned? 'test_file'
true true
File.owned? '/bin/ls'
false false
File.lstat('test_file').mode & 0777       # Keep only the permission bits.
420 420
def what_can_i_do?
  sys = Process::Sys	
  puts "UID=#{sys.getuid}, GID=#{sys.getgid}"
  puts "Effective UID=#{sys.geteuid}, Effective GID=#{sys.getegid}"
  file = '/bin/ls'
  can_do = [:readable?, :writable?, :executable?].inject([]) do |arr, method|
    arr << method if File.send(method, file); arr
  end
  puts "To you, #{file} is: #{can_do.join(', ')}"
end
what_can_i_do?
UID=0, GID=0
Effective UID=0, Effective GID=0
To you, /bin/ls is: readable?, writable?, executable?
UID=1000, GID=1000
Effective UID=1000, Effective GID=1000
To you, /bin/ls is: readable?, executable?
Process.uid = 1000
what_can_i_do?
UID=0, GID=0
Effective UID=1000, Effective GID=0
To you, /bin/ls is: readable?, executable?
UID=1000, GID=1000
Effective UID=1000, Effective GID=1000
To you, /bin/ls is: readable?, executable?