 
 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.
| Files and Directories | ||
|---|---|---|
| Code | Expected | Actual | 
| open('beans.txt', "w") do |file|
  file.puts('lima beans')
  file.puts('pinto beans')
  file.puts('human beans')
end
open('beans.txt') do |file| 
   file.each { |l| puts "A line from the file: #{l}" }
end | A line from the file: lima beans A line from the file: pinto beans A line from the file: human beans A stereotypical Unix path. | A line from the file: lima beans A line from the file: pinto beans A line from the file: human beans | 
| open('/etc/passwd') | A stereotypical Windows path; note the drive letter. | |
| open('c:/windows/Documents and Settings/User1/My Documents/ruby.doc')
open('c:\\windows\\Documents and Settings\\User1\\My Documents\\ruby.doc')
$stdin.each { |l| puts l }
$stdin.each { |l| $stdout.puts l } | create_tree.rb | Errno::ENOENT: No such file or directory - c:/windows/Documents and Settings/User1/My Documents/ruby.doc from (irb):10:in `initialize' from (irb):10 Errno::ENOENT: No such file or directory - c:\windows\Documents and Settings\User1\My Documents\ruby.doc from (irb):11:in `initialize' from (irb):11 | 
| def create_tree(directories, parent=".")
  directories.each_pair do |dir, files|
    path = File.join(parent, dir)
    Dir.mkdir path unless File.exists? path
    files.each do |filename, contents|
      if filename.respond_to? :each_pair   # It's a subdirectory
        create_tree filename, path
      else                                 # It's a file
        open(File.join(path, filename), 'w') { |f| f << contents || "" }
      end
    end
  end
end
require 'create_tree'
create_tree 'test' => 
  [ 'An empty file',
    ['A file with contents', 'Contents of file'],
    { 'Subdirectory' => ['Empty file in subdirectory',
                        ['File in subdirectory', 'Contents of file'] ] },
    { 'Empty subdirectory' => [] }
  ] 
require 'find'
Find.find('test') { |f| puts f } | test test/Empty subdirectory test/Subdirectory test/Subdirectory/File in subdirectory test/Subdirectory/Empty file in subdirectory test/A file with contents test/An empty file | test test/Empty subdirectory test/Subdirectory test/Subdirectory/File in subdirectory test/Subdirectory/Empty file in subdirectory test/A file with contents test/An empty file | 
| File.read('test/Subdirectory/File in subdirectory') | "Contents of file" | "Contents of file" |