module Grizzled::FileUtil
This module and its submodules contain various file-related utility methods.
Public Instance Methods
Create a file/directory hierarchy. The hash table specifies the entries, using the following rules.
-
A hash entry whose value is another hash table is taken to be a directory and will be recursively created.
-
A hash entry with a
String
value is a file, whose contents are the string. -
A hash entry with an Enumerable value is a file, whose contents are the enumerable values, rendered as strings.
-
Anything else is an error.
For instance, this hash:
tree = {"foo" => {"bar" => {"a" => "File a's contents", "b" => "File b's contents"}, "baz" => {"c" => "Blah blah blah"}, "xyzzy" => "Yadda yadda yadda"}}
results in this directory tree:
foo/ bar/ a # File a's contents b # File a's contents baz/ c # Blah blah blah xyzzy # Yadda yadda yadda
The keys should be simple file names, with no file separators (i.e., no parent directories).
Parameters:
- directory
-
The starting directory, which is created if it does not exist.
- tree
-
The entry tree, as described above
Returns:
A Dir
object for directory
, for convenience.
# File lib/grizzled/fileutil.rb, line 98 def make_directory_tree(directory, tree) require 'fileutils' if File.exists? directory if not File.directory? directory raise BadDirectoryTreeKey.new("Directory '#{directory}' already " + "exists and isn't a directory.") end else Dir.mkdir directory end FileUtils.cd directory do tree.each do |entry, contents| if entry.include? File::SEPARATOR raise BadDirectoryTreeKey.new("File tree key '#{key}' contains " + "illegal file separator character."); end # Must test Hash first, because Hash is Enumerable. if contents.kind_of? Hash # This is a directory make_directory_tree(entry, contents) elsif contents.kind_of? Enumerable File.open(File.join(entry), 'w') do |f| contents.each {|thing| f.write(thing.to_s)} end elsif contents.kind_of? String File.open(entry, "w") do |f| f.write(contents) end else raise BadDirectoryTreeValue.new(entry, contents) end end end return Dir.new(directory) end