class Chef::ChefFS::FileSystem::Repository::Directory
Attributes
bare_name[R]
display_name[R]
display_path[R]
file_path[R]
name[R]
parent[R]
path[R]
Public Class Methods
new(name, parent, file_path = nil)
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 37 def initialize(name, parent, file_path = nil) @parent = parent @name = name @path = Chef::ChefFS::PathUtils.join(parent.path, name) @file_path = file_path || "#{parent.file_path}/#{name}" end
Public Instance Methods
can_have_child?(name, is_dir)
click to toggle source
Public API called by multiplexed_dir
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 58 def can_have_child?(name, is_dir) possible_child = make_child_entry(name) possible_child.dir? == is_dir && possible_child.name_valid? end
child(name)
click to toggle source
Public API called by chef_fs/file_system
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 108 def child(name) possible_child = make_child_entry(name) if possible_child.name_valid? possible_child else NonexistentFSObject.new(name, self) end end
children()
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 72 def children return FileSystemCache.instance.children(file_path) if FileSystemCache.instance.exist?(file_path) children = dir_ls.sort .map { |child_name| make_child_entry(child_name) } .select { |new_child| new_child.fs_entry_valid? && can_have_child?(new_child.name, new_child.dir?) } FileSystemCache.instance.set_children(file_path, children) rescue Errno::ENOENT => e raise Chef::ChefFS::FileSystem::NotFoundError.new(self, e) end
create(file_contents = nil)
click to toggle source
File system wrappers
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 123 def create(file_contents = nil) if exists? raise Chef::ChefFS::FileSystem::AlreadyExistsError.new(:create_child, self) end begin FileSystemCache.instance.delete!(file_path) Dir.mkdir(file_path) rescue Errno::EEXIST raise Chef::ChefFS::FileSystem::AlreadyExistsError.new(:create_child, self) end end
create_child(child_name, file_contents = nil)
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 83 def create_child(child_name, file_contents = nil) child = make_child_entry(child_name) if child.exists? raise Chef::ChefFS::FileSystem::AlreadyExistsError.new(:create_child, child) end FileSystemCache.instance.delete!(child.file_path) if file_contents child.write(file_contents) else begin Dir.mkdir(child.file_path) rescue Errno::EEXIST raise Chef::ChefFS::FileSystem::AlreadyExistsError.new(:create_child, child) end end child end
delete(recurse)
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 140 def delete(recurse) if exists? unless recurse raise MustDeleteRecursivelyError.new(self, $!) end FileUtils.rm_r(file_path) FileSystemCache.instance.delete!(file_path) else raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!) end end
dir?()
click to toggle source
Public API called by chef_fs/file_system
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 64 def dir? true end
dir_ls()
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 136 def dir_ls Dir.entries(file_path).select { |p| !p.start_with?(".") } end
empty?()
click to toggle source
An empty children array is an empty dir
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 103 def empty? children.empty? end
exists?()
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 153 def exists? File.exist?(file_path) end
fs_entry_valid?()
click to toggle source
Whether or not the file system entry this object represents is valid. Mainly used to trim dotfiles/dotdirs and non directories from the list of children when enumerating items on the filesystem
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 51 def fs_entry_valid? name_valid? && File.directory?(file_path) end
name_valid?()
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 44 def name_valid? !name.start_with?(".") end
path_for_printing()
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 68 def path_for_printing file_path end
root()
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 117 def root parent.root end
Protected Instance Methods
make_child_entry(child_name)
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 163 def make_child_entry(child_name) raise "Not Implemented" end
write(data)
click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 159 def write(data) raise FileSystemError.new(self, nil, "attempted to write to a directory entry") end