class Chef::Cookbook::Chefignore

Constants

COMMENTS_AND_WHITESPACE

Attributes

ignores[R]

Public Class Methods

new(ignore_file_or_repo) click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 27
def initialize(ignore_file_or_repo)
  # Check the 'ignore_file_or_repo' path first and then look in the parent directory
  # to handle both the chef repo cookbook layout and a standalone cookbook
  @ignore_file = find_ignore_file(ignore_file_or_repo)
  @ignore_file = find_ignore_file(File.dirname(ignore_file_or_repo)) unless readable_file_or_symlink?(@ignore_file)

  @ignores = parse_ignore_file
end

Public Instance Methods

ignored?(file_name) click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 42
def ignored?(file_name)
  @ignores.any? {|glob| File.fnmatch?(glob, file_name)}
end
remove_ignores_from(file_list) click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 36
def remove_ignores_from(file_list)
  Array(file_list).inject([]) do |unignored, file|
    ignored?(file) ? unignored : unignored << file
  end
end

Private Instance Methods

find_ignore_file(path) click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 60
def find_ignore_file(path)
  if File.basename(path) =~ /chefignore/
    path
  else
    File.join(path, 'chefignore')
  end
end
parse_ignore_file() click to toggle source
# File lib/chef/cookbook/chefignore.rb, line 48
def parse_ignore_file
  ignore_globs = []
  if readable_file_or_symlink?(@ignore_file)
    File.foreach(@ignore_file) do |line|
      ignore_globs << line.strip unless line =~ COMMENTS_AND_WHITESPACE
    end
  else
    Chef::Log.debug("No chefignore file found at #@ignore_file no files will be ignored")
  end
  ignore_globs
end