class Sprockets::Utils::Gzip
Constants
- COMPRESSABLE_MIME_TYPES
What non-text mime types should we compress? This list comes from: www.fastly.com/blog/new-gzip-settings-and-deciding-what-compress
Public Class Methods
Private: Generates a gzipped file based off of reference file.
# File lib/sprockets/utils/gzip.rb, line 5 def initialize(asset) @content_type = asset.content_type @source = asset.source @charset = asset.charset end
Public Instance Methods
Private: Returns whether or not an asset can be compressed.
We want to compress any file that is text based. You do not want to compress binary files as they may already be compressed and running them through a compression algorithm would make them larger.
Return Boolean.
# File lib/sprockets/utils/gzip.rb, line 29 def can_compress?(mime_types) # The "charset" of a mime type is present if the value is # encoded text. We can check this value to see if the asset # can be compressed. # # We also check against our list of non-text compressible mime types @charset || COMPRESSABLE_MIME_TYPES.include?(@content_type) end
Private: Opposite of `can_compress?`.
Returns Boolean.
# File lib/sprockets/utils/gzip.rb, line 41 def cannot_compress?(mime_types) !can_compress?(mime_types) end
Private: Generates a gzipped file based off of reference asset.
Compresses the target asset's contents and puts it into a file with the same name plus a `.gz` extension in the same folder as the original. Does not modify the target asset.
Returns nothing.
# File lib/sprockets/utils/gzip.rb, line 52 def compress(target) mtime = PathUtils.stat(target).mtime PathUtils.atomic_write("#{target}.gz") do |f| gz = Zlib::GzipWriter.new(f, Zlib::BEST_COMPRESSION) gz.mtime = mtime gz.write(@source) gz.close File.utime(mtime, mtime, f.path) end nil end