 
 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.
| Automating Backups | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'fileutils'
def backup(from_dir, to_dir, time_format="-%Y%m%d")
  from_path, from_name = File.split(from_dir)
  now = Time.now.strftime(time_format)
  Dir.mkdir(to_dir) unless File.exists? to_dir
  unless File.directory? to_dir
    raise ArgumentError, "Not a directory: #{to_dir}" 
  end
  to = File.versioned_filename(File.join(to_dir, from_name + now))  
  FileUtils.cp_r(from_dir, to, :preserve=>true)
  return to
end | This method copied from "Backing Up to Versioned Filenames" | |
| class File
  def File.versioned_filename(base, first_suffix=".0")
    suffix = nil
    filename = base
    while File.exists?(filename)
      suffix = (suffix ? suffix.succ : first_suffix)
      filename = base + suffix
    end  
    return filename
  end
end | Create a dummy directory | |
| Dir.mkdir('recipes') | And back it up. | |
| backup('recipes', '/tmp/backup') | "/tmp/backup/recipes-20061031" | "/tmp/backup/recipes-20060413" | 
| backup('recipes', '/tmp/backup') | "/tmp/backup/recipes-20061031.0" | "/tmp/backup/recipes-20060413.0" | 
| backup('recipes', '/tmp/backup', '-%Y%m%d-%H.%M.%S') | "/tmp/backup/recipes-20061031-20.48.56" | "/tmp/backup/recipes-20060413-13.39.45" |