class Chef::ChefFS::FileSystem::Repository::FileSystemEntry

Attributes

file_path[R]

Public Class Methods

new(name, parent, file_path = nil, data_handler = nil) click to toggle source
Calls superclass method Chef::ChefFS::FileSystem::BaseFSDir.new
# 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

Public Instance Methods

can_have_child?(name, is_dir) click to toggle source
# 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() click to toggle source
# 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() click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 81
def children
  # Except cookbooks and data bag dirs, all things must be json files
  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(file_contents)
Alias for: write
create_child(child_name, file_contents = nil) click to toggle source
# 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() click to toggle source
# 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) click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 109
def delete(recurse)
  if dir?
    if !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?() click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 105
def dir?
  File.directory?(file_path)
end
exists?() click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 122
def exists?
  File.exists?(file_path) && (parent.nil? || parent.can_have_child?(name, dir?))
end
fs_entry_valid?() click to toggle source

basic implementation to support Repository::Directory API

# 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) click to toggle source
# 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?() click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 65
def name_valid?
  !name.start_with?(".")
end
path_for_printing() click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 50
def path_for_printing
  file_path
end
read() click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 126
def read
  File.open(file_path, "rb") { |f| f.read }
rescue Errno::ENOENT
  raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
end
write(file_contents) click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 132
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
Also aliased as: create
write_pretty_json() click to toggle source
# 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) click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 38
def write_pretty_json=(value)
  @write_pretty_json = value
end

Protected Instance Methods

make_child_entry(child_name) click to toggle source
# File lib/chef/chef_fs/file_system/repository/file_system_entry.rb, line 144
def make_child_entry(child_name)
  FileSystemEntry.new(child_name, self)
end