On Nov 30, 2007, at 11:59 AM, Trans wrote: > > > On Nov 30, 12:07 pm, Christophe Mckeon <chromatoph... / gmail.com> > wrote: >> i find these come in real handy, and thought they would be good for >> inclusion into FileUtils or barring that, then maybe the guys at >> Facets >> lib might be interested. they are based on Unix shell test >> options, i.e. >> [ -d somedir ] etc. >> it would be fairly trivial to implement the other test options as >> well. >> >> module FileUtils >> >> def b? path >> File.blockdev? path >> end >> >> def c? path >> File.chardev? path >> end >> >> def d? path >> File.directory? path >> end >> >> def e? path >> File.exists? path >> end >> >> def f? path >> File.file? path >> end >> >> def x? >> File.executable? path >> end > > Hmmm... you know about Kernel#test ? Eg. > > test ?d, path > > instead of > > FileUtils.directory?(path) > > > $ ri Kernel#test > > ------------------------------------------------------------ > Kernel#test > test(int_cmd, file1 [, file2] ) => obj > ---------------------------------------------------------------------- > -- > Uses the integer <em>aCmd</em> to perform various tests on > <em>file1</em> (first table below) or on <em>file1</em> and > <em>file2</em> (second table). > > File tests on a single file: > > Test Returns Meaning > ?A | Time | Last access time for file1 > ?b | boolean | True if file1 is a block device > ?c | boolean | True if file1 is a character device > ?C | Time | Last change time for file1 > ?d | boolean | True if file1 exists and is a directory > ?e | boolean | True if file1 exists > ?f | boolean | True if file1 exists and is a regular file > ?g | boolean | True if file1 has the \CF{setgid} bit > | | set (false under NT) > ?G | boolean | True if file1 exists and has a group > | | ownership equal to the caller's group > ?k | boolean | True if file1 exists and has the sticky bit > set > ?l | boolean | True if file1 exists and is a symbolic link > ?M | Time | Last modification time for file1 > ?o | boolean | True if file1 exists and is owned by > | | the caller's effective uid > ?O | boolean | True if file1 exists and is owned by > | | the caller's real uid > ?p | boolean | True if file1 exists and is a fifo > ?r | boolean | True if file1 is readable by the effective > | | uid/gid of the caller > ?R | boolean | True if file is readable by the real > | | uid/gid of the caller > ?s | int/nil | If file1 has nonzero size, return the size, > | | otherwise return nil > ?S | boolean | True if file1 exists and is a socket > ?u | boolean | True if file1 has the setuid bit set > ?w | boolean | True if file1 exists and is writable by > | | the effective uid/gid > ?W | boolean | True if file1 exists and is writable by > | | the real uid/gid > ?x | boolean | True if file1 exists and is executable by > | | the effective uid/gid > ?X | boolean | True if file1 exists and is executable by > | | the real uid/gid > ?z | boolean | True if file1 exists and has a zero length > > Tests that take two files: > > ?- | boolean | True if file1 and file2 are identical > ?= | boolean | True if the modification times of file1 > | | and file2 are equal > ?< | boolean | True if the modification time of file1 > | | is prior to that of file2 > ?> | boolean | True if the modification time of file1 > | | is after that of file2 > > T. > WOW! I always found myself avoiding Kernel because its name reminds me of the Linux Kernel, which I don't want to delve into. That's amazing. I'm almost shocked we've got so many file & directory tools when this is there...