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 callied by chef_fs/file_system

# File lib/chef/chef_fs/file_system/repository/directory.rb, line 106
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 121
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 82
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 137
def delete(recurse)
  if exists?
    if !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 133
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 101
def empty?
  children.empty?
end
exists?() click to toggle source
# File lib/chef/chef_fs/file_system/repository/directory.rb, line 149
def exists?
  File.exists?(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 115
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 159
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 155
def write(data)
  raise FileSystemError.new(self, nil, "attempted to write to a directory entry")
end