Module: Jekyll::Gzip::Compressor

Defined in:
lib/jekyll/gzip/compressor.rb

Overview

The module that does the compressing using Zlib.

Class Method Summary collapse

Class Method Details

.compress_directory(dir, site) ⇒ Object

Takes a directory path and maps over the files within compressing them in place.

Examples:

Jekyll::Gzip::Compressor.compress_directory("~/blog/_site", site)

Parameters:

  • dir (Pathname, String)

    The path to a directory of files ready for compression.

  • site (Jekyll::Site)

    An instance of the ‘Jekyll::Site` used for config.

Returns:

  • void



49
50
51
52
53
54
# File 'lib/jekyll/gzip/compressor.rb', line 49

def self.compress_directory(dir, site)
  extensions = zippable_extensions(site).join(',')
  replace_file = replace_files(site)
  files = Dir.glob(dir + "**/*{#{extensions}}")
  files.each { |file| compress_file(file, extensions: extensions, replace_file: replace_file) }
end

.compress_file(file_name, extensions: [], replace_file: false) ⇒ Object

Takes a file name and an array of extensions. If the file name extension matches one of the extensions in the array then the file is loaded and compressed using Zlib, outputting the gzipped file under the name of the original file with an extra .gz extension.

Examples:

Jekyll::Gzip::Compressor.compress_file("~/blog/_site/index.html")

Parameters:

  • file_name (String)

    The file name of the file we want to compress

  • extensions (Array<String>) (defaults to: [])

    The extensions of files that will be compressed.

  • replace_file (Boolean) (defaults to: false)

    Whether the origina file should be replaced or written alongside the original with a ‘.gz` extension

Returns:

  • void



72
73
74
75
76
77
78
79
80
81
# File 'lib/jekyll/gzip/compressor.rb', line 72

def self.compress_file(file_name, extensions: [], replace_file: false)
  return unless extensions.include?(File.extname(file_name))
  zipped = replace_file ? file_name : "#{file_name}.gz"
  file_content = IO.binread(file_name)
  Zlib::GzipWriter.open(zipped, Zlib::BEST_COMPRESSION) do |gz|
    gz.mtime = File.mtime(file_name)
    gz.orig_name = file_name
    gz.write file_content
  end
end

.compress_site(site) ⇒ Object

Takes an instance of Jekyll::Site and maps over the site files, compressing them in the destination directory.

Examples:

site = Jekyll::Site.new(site_config)
Jekyll::Gzip::Compressor.compress_site(site)

Parameters:

  • site (Jekyll::Site)

    A Jekyll::Site object that has generated its site files ready for compression.

Returns:

  • void



26
27
28
29
30
31
32
33
34
# File 'lib/jekyll/gzip/compressor.rb', line 26

def self.compress_site(site)
  site.each_site_file do |file|
    compress_file(
      file.destination(site.dest),
      extensions: zippable_extensions(site),
      replace_file: replace_files(site)
    )
  end
end