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