Guest User

Untitled

a guest
Apr 15th, 2012
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment