class Condenser::BrotliWriter

Generates a `.br` file using the Brotli algorithm with the brotli gem

Constants

ADDED_MIME_TYPES
COMPRESSALBE_FONT_TYPES
COMPRESSALBE_GENERIC_TYPES
COMPRESSALBE_TEXT_TYPES

What mime types should we compress? This list comes from: www.fastly.com/blog/new-gzip-settings-and-deciding-what-compress

Attributes

added_mime_types[R]
mime_types[R]

Public Class Methods

new(mime_types: nil, added_mime_types: nil) click to toggle source
# File lib/condenser/writers/brotli_writer.rb, line 21
def initialize(mime_types: nil, added_mime_types: nil)
  @mime_types = mime_types || (COMPRESSALBE_TEXT_TYPES + COMPRESSALBE_FONT_TYPES + COMPRESSALBE_GENERIC_TYPES)
  @added_mime_types = added_mime_types || ADDED_MIME_TYPES
end

Public Instance Methods

call(output_directory, asset) click to toggle source
# File lib/condenser/writers/brotli_writer.rb, line 44
def call(output_directory, asset)
  filename = File.join(output_directory, "#{asset.path}.br")
  FileUtils.mkdir_p(File.dirname(filename))
  Condenser::Utils.atomic_write(filename) do |file|
    file.write(Brotli.deflate(asset.source, {
      mode: mode_for_mime_type(asset.content_types.last),
      quality: 11
      # lgwin: 10-24
      # lgblock: 16-24 think bigger more compression but more mem
    }))
  end
  
  ["#{asset.filename}.br"]
end
exist?(asset) click to toggle source
# File lib/condenser/writers/brotli_writer.rb, line 30
def exist?(asset)
  ::File.exist?(path(asset))
end
mode_for_mime_type(mime_type) click to toggle source
# File lib/condenser/writers/brotli_writer.rb, line 34
def mode_for_mime_type(mime_type)
  if COMPRESSALBE_TEXT_TYPES.include?(mime_type)
    :text
  elsif COMPRESSALBE_FONT_TYPES.include?(mime_type)
    :font
  else
    :generic
  end
end
path(asset) click to toggle source
# File lib/condenser/writers/brotli_writer.rb, line 26
def path(asset)
  "#{asset.path}.br"
end