if ENV['RUN_CODE_RUN'] # We need to checkout edge haml for the run>code>run test environment. if File.directory?("haml") Dir.chdir("haml") do sh "git", "pull" end else sh "git", "clone", "git://github.com/nex3/haml.git" end $LOAD_PATH.unshift "haml/lib" end require 'rubygems' require 'rake' require 'lib/compass' # ----- Default: Testing ------ task :default => :run_tests require 'rake/testtask' require 'fileutils' Rake::TestTask.new :run_tests do |t| t.libs << 'lib' t.libs << 'haml/lib' if ENV["RUN_CODE_RUN"] test_files = FileList['test/**/*_test.rb'] test_files.exclude('test/rails/*', 'test/haml/*') t.test_files = test_files t.verbose = true end Rake::Task[:test].send(:add_comment, < boom puts "You are missing a dependency required for meta-operations on this gem." puts "#{boom.to_s.capitalize}." end desc "Compile Examples into HTML and CSS" task :examples do linked_haml = "tests/haml" if File.exists?(linked_haml) && !$:.include?(linked_haml + '/lib') puts "[ using linked Haml ]" $:.unshift linked_haml + '/lib' end require 'haml' require 'sass' require 'pathname' FileList['examples/*'].each do |example| puts "Compiling #{example} -> built_examples/#{example.sub(%r{.*/},'')}" # compile any haml templates to html FileList["#{example}/*.haml"].each do |haml_file| basename = haml_file[9..-6] engine = Haml::Engine.new(open(haml_file).read, :filename => haml_file) target_dir = "built_examples/#{basename.sub(%r{/[^/]*$},'')}" FileUtils.mkdir_p(target_dir) output = open("built_examples/#{basename}",'w') output.write(engine.render) output.close end # compile any sass templates to css FileList["#{example}/stylesheets/**/[^_]*.sass"].each do |sass_file| basename = sass_file[9..-6] css_filename = "built_examples/#{basename}.css" compass_sass = File.dirname(__FILE__).sub(%r{.*/},'') engine = Sass::Engine.new(open(sass_file).read, :filename => sass_file, :line_comments => true, :css_filename => css_filename, :load_paths => ["#{example}/stylesheets"] + Compass::Frameworks::ALL.map{|f| f.stylesheets_directory}) target_dir = "built_examples/#{basename.sub(%r{/[^/]*$},'')}" FileUtils.mkdir_p(target_dir) output = open(css_filename,'w') output.write(engine.render) output.close end # copy any other non-haml and non-sass files directly over target_dir = "built_examples/#{example.sub(%r{.*/},'')}" other_files = FileList["#{example}/**/*"] other_files.exclude "**/*.sass", "**/*.haml" other_files.each do |file| if File.directory?(file) FileUtils.mkdir_p(file) elsif File.file?(file) target_file = "#{target_dir}/#{file[(example.size+1)..-1]}" # puts "mkdir -p #{File.dirname(target_file)}" FileUtils.mkdir_p(File.dirname(target_file)) # puts "cp #{file} #{target_file}" FileUtils.cp(file, target_file) end end end end namespace :git do desc "Perform normal operations required for pushing to github." task :push => [:manifest, :gem] do sh "git", "add", "Manifest", "compass.gemspec", "VERSION" sh "git", "commit", "-m", "Updated Manifest and gemspec." sh "git", "push", "origin", "master" end task :clean do sh "git", "clean", "-fdx" end end task :manifest => :"git:clean"