Module: Jekyll::Brotli::Compressor
- Defined in:
- lib/jekyll/brotli/compressor.rb
Overview
The module that does the compressing using Brotli.
Class Method Summary collapse
-
.compress_directory(dir, site) ⇒ Object
Takes a directory path and maps over the files within compressing them in place.
-
.compress_file(file_name, extensions, quality = 11) ⇒ Object
Takes a file name and an array of extensions.
-
.compress_site(site) ⇒ Object
Takes an instance of
Jekyll::Siteand maps over the site files, compressing them in the destination directory. - .compressable_extensions(site) ⇒ Object
- .compressed(file_name) ⇒ Object
- .compression_quality(site) ⇒ Object
-
.regenerate?(file, site) ⇒ Boolean
Compresses the file if the site is built incrementally and the source was modified or the compressed file doesn't exist.
Class Method Details
.compress_directory(dir, site) ⇒ Object
Takes a directory path and maps over the files within compressing them in place.
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.
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.
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 |
.compressable_extensions(site) ⇒ Object
97 98 99 |
# File 'lib/jekyll/brotli/compressor.rb', line 97 def self.compressable_extensions(site) site.config.dig("brotli", "extensions") || Jekyll::Brotli::DEFAULT_CONFIG.fetch("extensions") end |
.compressed(file_name) ⇒ Object
93 94 95 |
# File 'lib/jekyll/brotli/compressor.rb', line 93 def self.compressed(file_name) "#{file_name}.br" end |
.compression_quality(site) ⇒ Object
101 102 103 |
# File 'lib/jekyll/brotli/compressor.rb', line 101 def self.compression_quality(site) site.config.dig("brotli", "quality") || Jekyll::Brotli::DEFAULT_CONFIG.fetch("quality") end |
.regenerate?(file, site) ⇒ Boolean
Compresses the file if the site is built incrementally and the source was modified or the compressed file doesn't exist
107 108 109 110 111 112 113 |
# File 'lib/jekyll/brotli/compressor.rb', line 107 def self.regenerate?(file, site) compressed = compressed(file) return true unless File.exist? compressed File.mtime(file) > File.mtime(compressed) end |