 
 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.
| Listing A Directory | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'create_tree'
create_tree 'mydir' => 
  [ {'subdirectory' => [['file_in_subdirectory', 'Just a simple file.']] },
    '.hidden_file', 'ruby_script.rb', 'text_file' ]
Dir.entries('mydir') | [".", "..", ".hidden_file", "ruby_script.rb", "subdirectory", | Error! (Exception?) Here's stdout: LoadError: no such file to load -- create_tree from (irb):1:in `require' from (irb):1 NoMethodError: undefined method `create_tree' for main:Object from (irb):4 Errno::ENOENT: No such file or directory - mydir from (irb):5:in `open' from (irb):5 | 
| Dir.foreach('mydir') { |x| puts x if x != "." && x != ".."} | .hidden_file ruby_script.rb subdirectory text_file Find all the "regular" files and subdirectories in mydir. This excludes hidden files, and the special directories . and .. | Error! (Exception?) Here's stdout: Errno::ENOENT: No such file or directory - mydir from (irb):6:in `open' from (irb):6 | 
| Dir["mydir/*"] | ["mydir/ruby_script.rb", "mydir/subdirectory", "mydir/text_file"] | [] | 
| Dir["mydir/*.rb"] | ["mydir/ruby_script.rb"] | [] | 
| Dir.open('mydir') { |d| d.grep /file/ } | [".hidden_file", "text_file"] | Error! (Exception?) Here's stdout: Errno::ENOENT: No such file or directory - mydir from (irb):9:in `open' from (irb):9 | 
| Dir.open('mydir') { |d| d.each { |x| puts x } } | . .. .hidden_file ruby_script.rb subdirectory text_file | Error! (Exception?) Here's stdout: Errno::ENOENT: No such file or directory - mydir from (irb):10:in `open' from (irb):10 | 
| #Get all contents other than ".", "..", and hidden files.
d = Dir.open('mydir')
d.reject { |f| f[0] == '.' } | ["subdirectory", "ruby_script.rb", "text_file"] | Error! (Exception?) Here's stdout: Errno::ENOENT: No such file or directory - mydir from (irb):12:in `open' from (irb):12 NoMethodError: undefined method `reject' for nil:NilClass from (irb):13 | 
| #Now the Dir object is useless until we call Dir#rewind. d.entries.size | 0 | Error! (Exception?) Here's stdout: NoMethodError: undefined method `entries' for nil:NilClass from (irb):15 | 
| d.rewind d.entries.size | 6 | Error! (Exception?) Here's stdout: NoMethodError: undefined method `rewind' for nil:NilClass from (irb):16 NoMethodError: undefined method `entries' for nil:NilClass from (irb):17 | 
| #Get the names of all files in the directory.
d.rewind
d.reject { |f| !File.file? File.join(d.path, f) } | [".hidden_file", "ruby_script.rb", "text_file"] | Error! (Exception?) Here's stdout: NoMethodError: undefined method `rewind' for nil:NilClass from (irb):19 NoMethodError: undefined method `reject' for nil:NilClass from (irb):20 | 
| d.close
def File.from_dir(dir, name)
  dir = dir.path if dir.is_a? Dir
  path = File.join(dir, name)
  (File.directory?(path) ? Dir : File).open(path) { |f| yield f }
end
File.from_dir("mydir", "subdirectory") do |subdir|
 File.from_dir(subdir, "file_in_subdirectory") do |file|
    puts %{My path is #{file.path} and my contents are "#{file.read}".}
  end
end | My path is mydir/subdirectory/file_in_subdirectory and my contents are "Just a simple file". | Error! (Exception?) Here's stdout: NoMethodError: undefined method `close' for nil:NilClass from (irb):21 Errno::ENOENT: No such file or directory - mydir/subdirectory from (irb):25:in `initialize' from (irb):25:in `from_dir' from (irb):27 | 
| Dir["mydir/**/*"] | ["mydir/ruby_script.rb", "mydir/subdirectory", "mydir/text_file", | [] | 
| Dir["mydir/**/*file*"] | ["mydir/text_file", "mydir/subdirectory/file_in_subdirectory"] | [] | 
| #Regex-style character classes Dir["mydir/[rs]*"] | ["mydir/ruby_script.rb", "mydir/subdirectory"] | [] | 
| Dir["mydir/[^s]*"] | ["mydir/ruby_script.rb", "mydir/text_file"] | [] | 
| Dir["mydir/{text,ruby}*"] | ["mydir/text_file", "mydir/ruby_script.rb"] | [] | 
| Dir["mydir/?ub*"] | ["mydir/ruby_script.rb", "mydir/subdirectory"] | [] | 
| Dir["mydir/.*"] | ["mydir/.", "mydir/..", "mydir/.hidden_file"] | [] |