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.
| Changing the Permissions on a File | ||
|---|---|---|
| Code | Expected | Actual |
class File
U_R = 0400
U_W = 0200
U_X = 0100
G_R = 0040
G_W = 0020
G_X = 0010
O_R = 0004
O_W = 0002
O_X = 0001
end
class File
A_R = 0444
A_W = 0222
A_X = 0111
end
open("my_file", "w") {}
File.chmod(File::U_R | File::U_W | File::G_R | File::O_R, "my_file")
File.chmod(File::A_R | File::U_W, "my_file")
File.chmod(0644, "my_file") # Bitmap: 110001001
File::U_R | File::U_W | File::G_R | File::O_R |
420 | 420 |
File::A_R | File::U_W |
420 | 420 |
0644 |
420 | 420 |
File.lstat("my_file").mode & 0777 |
420 | 420 |
new_permission = File.lstat("my_file").mode ^ File::O_R
File.chmod(new_permission, "my_file")
File.lstat("my_file").mode & 0777 |
416 | 416 |
new_permission = File.lstat("my_file").mode | File::A_R | File::A_W | File::A_X
File.chmod(new_permission, "my_file")
File.lstat("my_file").mode & 0777 |
511 | 511 |
new_permission = File.lstat("my_file").mode ^ (File::O_W | File::O_X)
File.chmod(new_permission, "my_file")
File.lstat("my_file").mode & 0777 |
508 | 508 |
class File
def File.fancy_chmod(permission_string, file)
mode = File.lstat(file).mode
permission_string.scan(/[ugoa][+-=][rwx]+/) do |setting|
who = setting[0..0]
setting[2..setting.size].each_byte do |perm|
perm = perm.chr.upcase
mask = eval("File::#{who.upcase}_#{perm}")
(setting[1] == ?+) ? mode |= mask : mode ^= mask
end
end
File.chmod(mode, file)
end
end |
Give the owning user write access |
|
File.fancy_chmod("u+w", "my_file")
File.lstat("my_file").mode & 0777 |
508 | 508 |
File.fancy_chmod("g-x", "my_file")
File.lstat("my_file").mode & 0777 |
500 | 500 |
File.fancy_chmod("a+rwx", "my_file")
File.lstat("my_file").mode & 0777 |
511 | 511 |
File.fancy_chmod("u+rwxo-x", "my_file")
File.lstat("my_file").mode & 0777 |
510 | 510 |