Module: Jekyll::Brotli::Compressor

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

Overview

The module that does the compressing using Brotli.

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::Brotli::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



53
54
55
56
57
58
59
60
61
62
# File 'lib/jekyll/brotli/compressor.rb', line 53

def self.compress_directory(dir, site)
  extensions = compressable_extensions(site).join(',')
  files = Dir.glob(File.join(dir, "**", "*{#{extensions}}"))
  quality = compression_quality(site)
  files.each do |file|
    next unless regenerate? file, site

    compress_file(file, compressable_extensions(site), quality)
  end
end

.compress_file(file_name, extensions, quality = 11) ⇒ 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 Brotli, outputting the compressed file under the name of the original file with an extra .br extension.

Examples:

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

Parameters:

  • file_name (String)

    The file name of the file we want to compress

  • extensions (Array<String>)

    The extensions of files that will be compressed.

Returns:

  • void



78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/jekyll/brotli/compressor.rb', line 78

def self.compress_file(file_name, extensions, quality = 11)
  return unless extensions.include?(File.extname(file_name))
  compressed = compressed(file_name)
  contents = ::Brotli.deflate(File.read(file_name), quality: quality)

  Jekyll.logger.debug "Brotli: #{compressed}"

  File.open(compressed, "w+") do |file|
    file << contents
  end
  File.utime(File.atime(file_name), File.mtime(file_name), compressed)
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::Brotli::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
35
36
37
38
# File 'lib/jekyll/brotli/compressor.rb', line 26

def self.compress_site(site)
  quality = compression_quality(site)

  site.each_site_file do |file|
    next unless regenerate? file.destination(site.dest), site

    compress_file(
      file.destination(site.dest),
      compressable_extensions(site),
      quality
    )
  end
end