Class: Chef::ChefFS::FileSystem::ChefRepositoryFileSystemCookbookEntry

Inherits:
ChefRepositoryFileSystemEntry show all
Defined in:
lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb

Direct Known Subclasses

ChefRepositoryFileSystemCookbookDir

Instance Attribute Summary collapse

Attributes inherited from FileSystemEntry

#file_path

Attributes inherited from BaseFSObject

#name, #parent, #path

Instance Method Summary collapse

Methods inherited from ChefRepositoryFileSystemEntry

#chef_object, #data_handler, #minimize, #write, #write_pretty_json=

Methods inherited from FileSystemEntry

#create_child, #delete, #dir?, #exists?, #path_for_printing, #read, #write

Methods inherited from BaseFSDir

#child, #dir?

Methods inherited from BaseFSObject

#chef_object, #child, #compare_to, #create_child, #delete, #dir?, #exists?, #path_for_printing, #read, #root, #write

Constructor Details

#initialize(name, parent, file_path = nil, ruby_only = false, recursive = false) ⇒ ChefRepositoryFileSystemCookbookEntry

Returns a new instance of ChefRepositoryFileSystemCookbookEntry.



27
28
29
30
31
# File 'lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb', line 27

def initialize(name, parent, file_path = nil, ruby_only = false, recursive = false)
  super(name, parent, file_path)
  @ruby_only = ruby_only
  @recursive = recursive
end

Instance Attribute Details

#recursiveObject (readonly)

Returns the value of attribute recursive.



34
35
36
# File 'lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb', line 34

def recursive
  @recursive
end

#ruby_onlyObject (readonly)

Returns the value of attribute ruby_only.



33
34
35
# File 'lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb', line 33

def ruby_only
  @ruby_only
end

Instance Method Details

#can_have_child?(name, is_dir) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb', line 47

def can_have_child?(name, is_dir)
  if is_dir
    return recursive && name != '.' && name != '..'
  elsif ruby_only
    return false if name[-3..-1] != '.rb'
  end

  # Check chefignore
  ignorer = parent
  begin
    if ignorer.is_a?(ChefRepositoryFileSystemCookbooksDir)
      # Grab the path from entry to child
      path_to_child = name
      child = self
      while child.parent != ignorer
        path_to_child = PathUtils.join(child.name, path_to_child)
        child = child.parent
      end
      # Check whether that relative path is ignored
      return !ignorer.chefignore || !ignorer.chefignore.ignored?(path_to_child)
    end
    ignorer = ignorer.parent
  end while ignorer

  true
end

#childrenObject



36
37
38
39
40
41
42
43
44
45
# File 'lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb', line 36

def children
  begin
    Dir.entries(file_path).sort.
        select { |child_name| can_have_child?(child_name, File.directory?(File.join(file_path, child_name))) }.
        map { |child_name| make_child(child_name) }.
        select { |entry| !(entry.dir? && entry.children.size == 0) }
  rescue Errno::ENOENT
    raise Chef::ChefFS::FileSystem::NotFoundError.new(self, $!)
  end
end

#write_pretty_jsonObject



74
75
76
# File 'lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb', line 74

def write_pretty_json
  false
end