Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 15th, 2012  |  syntax: None  |  size: 1.38 KB  |  hits: 20  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/usr/bin/env ruby
  2.  
  3. module MinifyResources
  4.   CSS_BLOB  = 'public/blob.css'
  5.   CSS_DIR   = 'public/css'
  6.   CSS_LIST  = 'public/css/manifest.txt'
  7.   CSS_FILES = File.exists?(CSS_LIST) ? IO.read(CSS_LIST).scan(/\S+/) : Dir.chdir(CSS_DIR){ Dir['*.css'] }
  8.  
  9.   JS_BLOB   = 'public/blob.js'
  10.   JS_DIR    = 'public/js'
  11.   JS_LIST   = 'public/js/manifest.txt'
  12.   JS_FILES  = File.exists?(JS_LIST) ? IO.read(JS_LIST).scan(/\S+/) : Dir.chdir(JS_DIR){ Dir['*.js'] }
  13.  
  14.   def self.minify_all
  15.     require 'jsmin'
  16.     require 'cssmin'
  17.     minify(::JSMin,  JS_DIR,  JS_FILES,  JS_BLOB)
  18.     minify(::CSSMin, CSS_DIR, CSS_FILES, CSS_BLOB)
  19.   end
  20.  
  21.   def self.minify(lib, source_dir, files, output)
  22.     return if files.empty?
  23.     require_relative 'helpers/nicebytes'
  24.     raw_size = 0
  25.     minified = files.map do |file|
  26.       raw = IO.read(File.join(source_dir,file))
  27.       raw_size += raw.length
  28.       lib.minify(raw.dup)
  29.     end.join
  30.     min_size = minified.length
  31.     existing = File.exists?(output) && IO.read(output)
  32.    
  33.     if minified == existing
  34.       puts "No change to #{output}"
  35.     else
  36.       File.open(output,"w"){ |f| f << minified }
  37.  
  38.       puts "%i files => %s; %s => %s (%.1f%% reduction)" % [
  39.         files.length,
  40.         output,
  41.         NiceBytes.nice_bytes(raw_size),
  42.         NiceBytes.nice_bytes(min_size),
  43.         100*(raw_size-min_size)/raw_size
  44.       ]
  45.     end
  46.   end
  47. end
  48.  
  49. MinifyResources.minify_all if __FILE__ == $0