class Awestruct::Extensions::Minify

Public Class Methods

new(types = [ :js ]) click to toggle source
# File lib/awestruct/extensions/minify.rb, line 54
def initialize(types = [ :js ])
  @types = types
end

Public Instance Methods

transform(site, page, input) click to toggle source
# File lib/awestruct/extensions/minify.rb, line 58
def transform(site, page, input)
  if site.minify
    ext = File.extname(page.output_path)
    if !ext.empty?
      ext_sym = ext[1..-1].to_sym
      if @types.include?(ext_sym)
        case ext_sym
        when :html
          $LOG.debug "minifying html #{page.output_path}" if $LOG.debug?
          input = htmlcompressor(page, input, site.minify_html_opts)
        when :css
          # TODO: Figure out how to do this is sass / less and document it
          #print "minifying css #{page.output_path}"
          #input = yuicompressor_css(page, input)
        when :js
          $LOG.debug "minifying js #{page.output_path}" if $LOG.debug?
          input = js_compressor(page, input)
        when :png
          $LOG.debug "minifying png #{page.output_path}" if $LOG.debug?
          input = pngcrush(page, input)
        end
      end
    end
  end
  input
end

Private Instance Methods

compressor(page, input, compressor) click to toggle source
# File lib/awestruct/extensions/minify.rb, line 102
def compressor(page, input, compressor)
  output = compressor.compress input

  input_len = input.length
  output_len = output.length

  if input_len > output_len
    $LOG.debug " %d bytes -> %d bytes = %.1f%%" % [ input_len, output_len, 100 * output_len/input_len ] if $LOG.debug?
    output
  else
    $LOG.debug " no gain" if $LOG.debug?
    input
  end
end
htmlcompressor(page, input, minify_html_opts) click to toggle source
# File lib/awestruct/extensions/minify.rb, line 93
def htmlcompressor(page, input, minify_html_opts)
  opts = minify_html_opts.nil? ? {}:minify_html_opts
  compressor(page, input, HtmlCompressor::Compressor.new(opts))
end
js_compressor(page, input) click to toggle source
# File lib/awestruct/extensions/minify.rb, line 98
def js_compressor(page, input)
  compressor(page, input, JSCompressor.new)
end
pngcrush(page, input) click to toggle source
# File lib/awestruct/extensions/minify.rb, line 117
def pngcrush(page, input)
  filename = page.source_path
  cmd = "pngcrush " + Shellwords.escape("#{filename}") + " /tmp/pngcrush"
  `#{cmd}`
  if $?.exitstatus != 0
    raise "Failed to execute pngcrush: #{cmd}"
  end
  output = File.read('/tmp/pngcrush')

  input_len = File.stat(filename).size
  output_len = output.length

  if input_len > output_len
    $LOG.debug " %d bytes -> %d bytes = %.1f%%" % [ input_len, output_len, 100 * output_len/input_len ] if $LOG.debug?
    output
  else
    $LOG.debug " no gain" if $LOG.debug?
    input
  end
end