class Jekyll::Site::Cleaner

Handles the cleanup of a site's destination before it is built.

Attributes

site[R]

Public Class Methods

new(site) click to toggle source
# File lib/jekyll/cleaner.rb, line 9
def initialize(site)
  @site = site
end

Public Instance Methods

cleanup!() click to toggle source

Cleans up the site's destination directory

# File lib/jekyll/cleaner.rb, line 14
def cleanup!
  FileUtils.rm_rf(obsolete_files)
end

Private Instance Methods

existing_files() click to toggle source

Private: The list of existing files, apart from those included in keep_files and hidden files.

Returns a Set with the file paths

# File lib/jekyll/cleaner.rb, line 30
def existing_files
  files = Set.new
  Dir.glob(site.in_dest_dir("**", "*"), File::FNM_DOTMATCH) do |file|
    files << file unless file =~ /\/\.{1,2}$/ || file =~ keep_file_regex || keep_dirs.include?(file)
  end
  files
end
keep_dirs() click to toggle source

Private: The list of directories that need to be kept because they are parent directories of files specified in keep_files

Returns a Set with the directory paths

# File lib/jekyll/cleaner.rb, line 78
def keep_dirs
  site.keep_files.map { |file| parent_dirs(site.in_dest_dir(file)) }.flatten.to_set
end
keep_file_regex() click to toggle source

Private: Creates a regular expression from the config's keep_files array

Examples

['.git','.svn'] creates the following regex: /\/(\.git|\/.svn)/

Returns the regular expression

# File lib/jekyll/cleaner.rb, line 88
def keep_file_regex
  or_list = site.keep_files.join("|")
  pattern = "\/(#{or_list.gsub(".", "\.")})"
  Regexp.new pattern
end
new_dirs() click to toggle source

Private: The list of directories to be created when site is built. These are the parent directories of the files in new_files.

Returns a Set with the directory paths

# File lib/jekyll/cleaner.rb, line 51
def new_dirs
  new_files.map { |file| parent_dirs(file) }.flatten.to_set
end
new_files() click to toggle source

Private: The list of files to be created when site is built.

Returns a Set with the file paths

# File lib/jekyll/cleaner.rb, line 41
def new_files
  files = Set.new
  site.each_site_file { |item| files << item.destination(site.dest) }
  files
end
obsolete_files() click to toggle source

Private: The list of files and directories to be deleted during cleanup process

Returns an Array of the file and directory paths

# File lib/jekyll/cleaner.rb, line 23
def obsolete_files
  (existing_files - new_files - new_dirs + replaced_files).to_a
end
parent_dirs(file) click to toggle source

Private: The list of parent directories of a given file

Returns an Array with the directory paths

# File lib/jekyll/cleaner.rb, line 58
def parent_dirs(file)
  parent_dir = File.dirname(file)
  if parent_dir == site.dest
    []
  else
    [parent_dir] + parent_dirs(parent_dir)
  end
end
replaced_files() click to toggle source

Private: The list of existing files that will be replaced by a directory during build

Returns a Set with the file paths

# File lib/jekyll/cleaner.rb, line 70
def replaced_files
  new_dirs.select { |dir| File.file?(dir) }.to_set
end