def system(*a) puts " $ #{a[0]}" super end module Compressor def self.compress(jscode) require 'net/http' require 'uri' response = Net::HTTP.post_form(URI.parse('http://closure-compiler.appspot.com/compile'), { 'js_code' => jscode, 'compilation_level' => "SIMPLE_OPTIMIZATIONS", 'output_format' => 'text', 'output_info' => 'compiled_code' }) response.body end def self.compress_with_comment(jscode) comment = jscode.match(/(\/\*!.*?\*\/)/m) && $1 compressed = compress(jscode) compressed = comment + "\n" + compressed if comment compressed end end module Helpers def can_run?(what) ! `which #{what}`.strip.empty? end def version contents = File.read('jquery.transit.js') m = contents.match(/version: "(.*?)"/) m[1] end def die(str) puts str exit end end extend Helpers desc "Print version." task :version do puts version end desc "Puts released versions on the site." task :release => :compress do require 'fileutils' fn = "site/jquery.transit-#{version}.js" FileUtils.cp 'site/jquery.transit.js', fn puts "==> #{fn}" fn = "site/jquery.transit-#{version}.min.js" FileUtils.cp 'site/jquery.transit.min.js', fn puts "==> #{fn}" end task :check_deps do die "Error: You need Rocco. Try `gem install fl-rocco`." unless can_run?('rocco') begin require 'proton' rescue LoadError => e die "Error: You need Proton. Try `gem install proton`." end end task :compress do system "cp jquery.transit.js site/" puts "==> Compressing (site/jquery.transit.min.js)..." str = File.read('jquery.transit.js') str = Compressor.compress_with_comment(str) File.open('site/jquery.transit.min.js', 'w') { |f| f.write str } end # Prepare task :prebuild => [:check_deps, :compress] do puts "==> Generating annotated source..." system "rocco jquery.transit.js > /dev/null" system "mv ./jquery.transit.html site/source.html" system "rm -rf docs" puts "==> Copying test files..." system "rm -rf site/test" system "cp -R test site/test" end desc "Builds the website" task :build => :prebuild do puts "==> Building site..." system "cd site && proton build" end desc "Deploys the website" task :deploy => :build do system "git update-ghpages rstacruz/jquery.transit -i site/_output -b gh-pages" end desc "Starts the preview site" task :preview => [:check_deps] do port = ENV['port'] || 4833 exec "cd site && proton start -p #{port}" end