Class: Chef::ChefFS::FileSystem::Repository::Directory
- Inherits:
-
Object
- Object
- Chef::ChefFS::FileSystem::Repository::Directory
- Defined in:
- lib/chef/chef_fs/file_system/repository/directory.rb
Direct Known Subclasses
AclsDir, AclsSubDir, ClientKeysDir, ClientKeysSubDir, ClientsDir, ContainersDir, CookbooksDir, DataBag, DataBagsDir, EnvironmentsDir, GroupsDir, NodesDir, PoliciesDir, PolicyGroupsDir, RolesDir, UsersDir
Instance Attribute Summary collapse
-
#file_path ⇒ Object
readonly
Returns the value of attribute file_path.
-
#name ⇒ Object
(also: #display_name, #bare_name)
readonly
Returns the value of attribute name.
-
#parent ⇒ Object
readonly
Returns the value of attribute parent.
-
#path ⇒ Object
(also: #display_path)
readonly
Returns the value of attribute path.
Instance Method Summary collapse
-
#can_have_child?(name, is_dir) ⇒ Boolean
Public API called by multiplexed_dir.
-
#child(name) ⇒ Object
Public API called by chef_fs/file_system.
- #children ⇒ Object
-
#create(file_contents = nil) ⇒ Object
File system wrappers.
- #create_child(child_name, file_contents = nil) ⇒ Object
- #delete(recurse) ⇒ Object
-
#dir? ⇒ Boolean
Public API called by chef_fs/file_system.
- #dir_ls ⇒ Object
-
#empty? ⇒ Boolean
An empty children array is an empty dir.
- #exists? ⇒ Boolean
-
#fs_entry_valid? ⇒ Boolean
Whether or not the file system entry this object represents is valid.
-
#initialize(name, parent, file_path = nil) ⇒ Directory
constructor
A new instance of Directory.
- #name_valid? ⇒ Boolean
- #path_for_printing ⇒ Object
- #root ⇒ Object
Constructor Details
#initialize(name, parent, file_path = nil) ⇒ Directory
Returns a new instance of Directory.
37 38 39 40 41 42 |
# 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 |
Instance Attribute Details
#file_path ⇒ Object (readonly)
Returns the value of attribute file_path.
31 32 33 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 31 def file_path @file_path end |
#name ⇒ Object (readonly) Also known as: display_name, bare_name
Returns the value of attribute name.
28 29 30 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 28 def name @name end |
#parent ⇒ Object (readonly)
Returns the value of attribute parent.
29 30 31 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 29 def parent @parent end |
#path ⇒ Object (readonly) Also known as: display_path
Returns the value of attribute path.
30 31 32 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 30 def path @path end |
Instance Method Details
#can_have_child?(name, is_dir) ⇒ Boolean
Public API called by multiplexed_dir
58 59 60 61 |
# 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) ⇒ Object
Public API called by chef_fs/file_system
108 109 110 111 112 113 114 115 |
# 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 ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# 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) ⇒ Object
File system wrappers
123 124 125 126 127 128 129 130 131 132 133 134 |
# 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) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# 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) ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 |
# 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? ⇒ Boolean
Public API called by chef_fs/file_system
64 65 66 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 64 def dir? true end |
#dir_ls ⇒ Object
136 137 138 |
# 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? ⇒ Boolean
An empty children array is an empty dir
103 104 105 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 103 def empty? children.empty? end |
#exists? ⇒ Boolean
153 154 155 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 153 def exists? File.exist?(file_path) end |
#fs_entry_valid? ⇒ Boolean
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
51 52 53 |
# 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? ⇒ Boolean
44 45 46 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 44 def name_valid? !name.start_with?(".") end |
#path_for_printing ⇒ Object
68 69 70 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 68 def path_for_printing file_path end |
#root ⇒ Object
117 118 119 |
# File 'lib/chef/chef_fs/file_system/repository/directory.rb', line 117 def root parent.root end |