Class: Chef::ChefFS::FileSystem::Repository::FileSystemEntry
- Inherits:
-
BaseFSDir
show all
- Defined in:
- lib/chef/chef_fs/file_system/repository/file_system_entry.rb
Instance Attribute Summary collapse
Attributes inherited from BaseFSObject
#name, #parent, #path
Instance Method Summary
collapse
Methods inherited from BaseFSDir
#empty?
#child, #compare_to, #root
Constructor Details
#initialize(name, parent, file_path = nil, data_handler = nil) ⇒ FileSystemEntry
Returns a new instance of FileSystemEntry.
30
31
32
33
34
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 30
def initialize(name, parent, file_path = nil, data_handler = nil)
super(name, parent)
@file_path = file_path || "#{parent.file_path}/#{name}"
@data_handler = data_handler
end
|
Instance Attribute Details
#file_path ⇒ Object
Returns the value of attribute file_path.
36
37
38
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 36
def file_path
@file_path
end
|
Instance Method Details
#can_have_child?(name, is_dir) ⇒ Boolean
61
62
63
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 61
def can_have_child?(name, is_dir)
!is_dir && File.extname(name) == ".json"
end
|
#chef_object ⇒ Object
54
55
56
57
58
59
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 54
def chef_object
data_handler.chef_object(Chef::JSONCompat.parse(read))
rescue
Chef::Log.error("Could not read #{path_for_printing} into a Chef object: #{$!}")
nil
end
|
#children ⇒ Object
81
82
83
84
85
86
87
88
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 81
def children
Dir.entries(file_path).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?) }
rescue Errno::ENOENT
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
end
|
#create_child(child_name, file_contents = nil) ⇒ Object
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 90
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
if file_contents
child.write(file_contents)
else
Dir.mkdir(child.file_path)
end
child
rescue Errno::EEXIST
raise Chef::ChefFS::FileSystem::AlreadyExistsError.new(:create_child, child)
end
|
#data_handler ⇒ Object
46
47
48
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 46
def data_handler
@data_handler || parent.data_handler
end
|
#delete(recurse) ⇒ Object
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 110
def delete(recurse)
if dir?
unless recurse
raise MustDeleteRecursivelyError.new(self, $!)
end
FileUtils.rm_r(file_path)
else
File.delete(file_path)
end
rescue Errno::ENOENT
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
end
|
#dir? ⇒ Boolean
106
107
108
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 106
def dir?
File.directory?(file_path)
end
|
#exists? ⇒ Boolean
124
125
126
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 124
def exists?
File.exist?(file_path) && (parent.nil? || parent.can_have_child?(name, dir?))
end
|
#fs_entry_valid? ⇒ Boolean
basic implementation to support Repository::Directory API
70
71
72
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 70
def fs_entry_valid?
name_valid? && File.exist?(file_path)
end
|
#minimize(file_contents, entry) ⇒ Object
74
75
76
77
78
79
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 74
def minimize(file_contents, entry)
object = Chef::JSONCompat.parse(file_contents)
object = data_handler.normalize(object, entry)
object = data_handler.minimize(object, entry)
Chef::JSONCompat.to_json_pretty(object)
end
|
#name_valid? ⇒ Boolean
65
66
67
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 65
def name_valid?
!name.start_with?(".")
end
|
#path_for_printing ⇒ Object
50
51
52
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 50
def path_for_printing
file_path
end
|
#read ⇒ Object
128
129
130
131
132
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 128
def read
File.binread(file_path)
rescue Errno::ENOENT
raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
end
|
#write(file_contents) ⇒ Object
Also known as:
create
134
135
136
137
138
139
140
141
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 134
def write(file_contents)
if file_contents && write_pretty_json && File.extname(name) == ".json"
file_contents = minimize(file_contents, self)
end
File.open(file_path, "wb") do |file|
file.write(file_contents)
end
end
|
#write_pretty_json ⇒ Object
42
43
44
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 42
def write_pretty_json
@write_pretty_json.nil? ? root.write_pretty_json : @write_pretty_json
end
|
#write_pretty_json=(value) ⇒ Object
38
39
40
|
# File 'lib/chef/chef_fs/file_system/repository/file_system_entry.rb', line 38
def write_pretty_json=(value)
@write_pretty_json = value
end
|