2012-04-27 12:46:28 -04:00
|
|
|
require "rake/clean"
|
|
|
|
require 'rake/testtask'
|
|
|
|
require 'rubygems/package_task'
|
|
|
|
|
|
|
|
CLEAN << %w(pkg doc coverage .yardoc)
|
2010-02-28 19:50:33 -05:00
|
|
|
|
|
|
|
def scope(path)
|
|
|
|
File.join(File.dirname(__FILE__), path)
|
|
|
|
end
|
|
|
|
|
2012-04-27 12:46:28 -04:00
|
|
|
desc "Benchmark Haml against ERb. TIMES=n sets the number of runs, default is 1000."
|
2006-12-15 23:21:34 -05:00
|
|
|
task :benchmark do
|
2008-05-06 03:43:43 -04:00
|
|
|
sh "ruby test/benchmark.rb #{ENV['TIMES']}"
|
2006-11-28 21:16:51 -05:00
|
|
|
end
|
|
|
|
|
2008-05-06 03:43:43 -04:00
|
|
|
Rake::TestTask.new do |t|
|
|
|
|
t.libs << 'lib'
|
2012-04-27 12:46:28 -04:00
|
|
|
t.test_files = Dir["test/**/*_test.rb"].reject {|x| x =~ /haml-spec/}
|
2008-05-06 03:43:43 -04:00
|
|
|
t.verbose = true
|
|
|
|
end
|
2009-09-21 17:21:38 -04:00
|
|
|
|
2012-04-27 12:46:28 -04:00
|
|
|
gemspec = File.expand_path("../haml.gemspec", __FILE__)
|
|
|
|
if File.exist? gemspec
|
|
|
|
Gem::PackageTask.new(eval(File.read(gemspec))) { |pkg| }
|
2009-09-21 17:21:38 -04:00
|
|
|
end
|
|
|
|
|
2010-01-16 18:57:12 -05:00
|
|
|
task :submodules do
|
|
|
|
if File.exist?(File.dirname(__FILE__) + "/.git")
|
|
|
|
sh %{git submodule sync}
|
2010-10-03 20:04:11 -04:00
|
|
|
sh %{git submodule update --init --recursive}
|
2010-01-16 18:57:12 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2009-03-30 04:27:08 -04:00
|
|
|
begin
|
2009-06-07 16:05:02 -04:00
|
|
|
require 'yard'
|
2009-03-30 04:27:08 -04:00
|
|
|
|
2010-04-20 02:25:44 -04:00
|
|
|
namespace :doc do
|
|
|
|
desc "List all undocumented methods and classes."
|
|
|
|
task :undocumented do
|
2012-04-27 12:46:28 -04:00
|
|
|
command = 'yard --list --query '
|
|
|
|
command << '"object.docstring.blank? && '
|
|
|
|
command << '!(object.type == :method && object.is_alias?)"'
|
|
|
|
sh command
|
2010-04-20 02:25:44 -04:00
|
|
|
end
|
2009-11-23 17:01:16 -05:00
|
|
|
end
|
|
|
|
|
2012-04-27 12:46:28 -04:00
|
|
|
desc "Generate documentation"
|
|
|
|
task(:doc) {sh "yard"}
|
2010-04-20 02:25:44 -04:00
|
|
|
|
2012-04-27 12:46:28 -04:00
|
|
|
desc "Generate documentation incrementally"
|
|
|
|
task(:redoc) {sh "yard -c"}
|
2009-03-30 04:27:08 -04:00
|
|
|
|
|
|
|
rescue LoadError
|
2008-05-06 03:43:43 -04:00
|
|
|
end
|
2006-10-14 19:50:07 -04:00
|
|
|
|
2009-06-18 00:23:35 -04:00
|
|
|
task :pages do
|
2010-08-22 19:04:02 -04:00
|
|
|
puts "#{'=' * 50} Running rake pages"
|
2009-07-04 19:36:50 -04:00
|
|
|
ensure_git_cleanup do
|
2010-08-22 19:04:02 -04:00
|
|
|
sh %{git checkout haml-pages}
|
|
|
|
sh %{git reset --hard origin/haml-pages}
|
2009-07-04 19:36:50 -04:00
|
|
|
|
2010-08-22 19:04:02 -04:00
|
|
|
Dir.chdir("/var/www/haml-pages") do
|
2009-10-09 01:32:56 -04:00
|
|
|
sh %{git fetch origin}
|
2009-10-09 01:28:47 -04:00
|
|
|
|
2009-10-09 01:32:56 -04:00
|
|
|
sh %{git checkout stable}
|
|
|
|
sh %{git reset --hard origin/stable}
|
2009-10-09 01:28:47 -04:00
|
|
|
|
2010-08-22 19:04:02 -04:00
|
|
|
sh %{git checkout haml-pages}
|
|
|
|
sh %{git reset --hard origin/haml-pages}
|
2009-10-09 01:32:56 -04:00
|
|
|
sh %{rake build --trace}
|
|
|
|
sh %{mkdir -p tmp}
|
|
|
|
sh %{touch tmp/restart.txt}
|
|
|
|
end
|
2009-07-04 19:36:50 -04:00
|
|
|
end
|
2009-06-18 00:23:35 -04:00
|
|
|
end
|
|
|
|
|
2008-05-06 03:43:43 -04:00
|
|
|
# ----- Coverage -----
|
|
|
|
|
2008-05-15 18:02:45 -04:00
|
|
|
begin
|
|
|
|
require 'rcov/rcovtask'
|
|
|
|
|
2008-05-06 03:43:43 -04:00
|
|
|
Rcov::RcovTask.new do |t|
|
2010-02-28 19:50:33 -05:00
|
|
|
t.test_files = FileList[scope('test/**/*_test.rb')]
|
2008-05-06 03:43:43 -04:00
|
|
|
t.rcov_opts << '-x' << '"^\/"'
|
|
|
|
if ENV['NON_NATIVE']
|
|
|
|
t.rcov_opts << "--no-rcovrt"
|
2006-10-27 16:36:34 -04:00
|
|
|
end
|
2008-05-06 03:43:43 -04:00
|
|
|
t.verbose = true
|
2006-10-14 19:50:07 -04:00
|
|
|
end
|
2008-05-15 18:02:45 -04:00
|
|
|
rescue LoadError; end
|
2006-10-14 19:50:07 -04:00
|
|
|
|
2008-05-06 03:43:43 -04:00
|
|
|
# ----- Profiling -----
|
2006-10-14 19:50:07 -04:00
|
|
|
|
2008-05-15 18:43:32 -04:00
|
|
|
begin
|
|
|
|
require 'ruby-prof'
|
|
|
|
|
|
|
|
desc <<END
|
2008-05-15 18:02:45 -04:00
|
|
|
Run a profile of haml.
|
2008-05-15 18:43:32 -04:00
|
|
|
TIMES=n sets the number of runs. Defaults to 1000.
|
2010-08-22 19:04:02 -04:00
|
|
|
FILE=str sets the file to profile. Defaults to 'standard'
|
2008-05-15 18:43:32 -04:00
|
|
|
OUTPUT=str sets the ruby-prof output format.
|
|
|
|
Can be Flat, CallInfo, or Graph. Defaults to Flat. Defaults to Flat.
|
2008-05-15 18:02:45 -04:00
|
|
|
END
|
2008-05-15 18:43:32 -04:00
|
|
|
task :profile do
|
|
|
|
times = (ENV['TIMES'] || '1000').to_i
|
|
|
|
file = ENV['FILE']
|
|
|
|
|
2010-08-22 19:04:02 -04:00
|
|
|
require 'lib/haml'
|
2008-05-15 18:43:32 -04:00
|
|
|
|
2010-08-22 19:04:02 -04:00
|
|
|
file = File.read(scope("test/haml/templates/#{file || 'standard'}.haml"))
|
|
|
|
obj = Object.new
|
|
|
|
Haml::Engine.new(file).def_method(obj, :render)
|
|
|
|
result = RubyProf.profile { times.times { obj.render } }
|
2006-12-15 23:21:34 -05:00
|
|
|
|
2012-04-27 12:46:28 -04:00
|
|
|
RubyProf.const_get("#{(ENV['OUTPUT'] || 'Flat').capitalize}Printer").new(result).print
|
2008-05-15 18:43:32 -04:00
|
|
|
end
|
|
|
|
rescue LoadError; end
|
2009-02-10 04:39:18 -05:00
|
|
|
|
|
|
|
# ----- Testing Multiple Rails Versions -----
|
|
|
|
|
|
|
|
rails_versions = [
|
2011-09-20 16:16:50 -04:00
|
|
|
"v3.1.0",
|
|
|
|
"v3.0.10",
|
|
|
|
"v2.3.14",
|
2010-03-02 18:36:01 -05:00
|
|
|
"v2.2.3",
|
2009-02-10 04:39:18 -05:00
|
|
|
"v2.1.2",
|
|
|
|
]
|
2009-11-08 19:45:51 -05:00
|
|
|
rails_versions << "v2.0.5" if RUBY_VERSION =~ /^1\.8/
|
2009-02-10 04:39:18 -05:00
|
|
|
|
2010-03-02 18:50:42 -05:00
|
|
|
def test_rails_version(version)
|
|
|
|
Dir.chdir "test/rails" do
|
2010-05-12 18:23:49 -04:00
|
|
|
sh %{git checkout #{version}}
|
2010-03-02 18:50:42 -05:00
|
|
|
end
|
|
|
|
puts "Testing Rails #{version}"
|
|
|
|
Rake::Task['test'].reenable
|
|
|
|
Rake::Task['test'].execute
|
|
|
|
end
|
|
|
|
|
2011-09-21 20:40:33 -04:00
|
|
|
def gemfiles
|
|
|
|
@gemfiles ||=
|
2009-02-10 04:39:18 -05:00
|
|
|
begin
|
2011-09-21 20:40:33 -04:00
|
|
|
raise 'Must install bundler to run Rails compatibility tests' if `which bundle`.empty?
|
|
|
|
Dir[File.dirname(__FILE__) + '/test/gemfiles/Gemfile.*'].
|
|
|
|
reject {|f| f =~ /\.lock$/}.
|
|
|
|
reject {|f| RUBY_VERSION !~ /^1\.8/ && f =~ /Gemfile\.rails-2\.[0-2]/}
|
2009-02-10 04:39:18 -05:00
|
|
|
end
|
2011-09-21 20:40:33 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def with_each_gemfile
|
|
|
|
old_env = ENV['BUNDLE_GEMFILE']
|
|
|
|
gemfiles.each do |gemfile|
|
|
|
|
puts "Using gemfile: #{gemfile}"
|
|
|
|
ENV['BUNDLE_GEMFILE'] = gemfile
|
|
|
|
yield
|
|
|
|
end
|
|
|
|
ensure
|
|
|
|
ENV['BUNDLE_GEMFILE'] = old_env
|
|
|
|
end
|
|
|
|
|
|
|
|
namespace :test do
|
|
|
|
namespace :bundles do
|
|
|
|
desc "Install all dependencies necessary to test Haml."
|
|
|
|
task :install do
|
2012-04-26 16:44:48 -04:00
|
|
|
with_each_gemfile {sh "bundle"}
|
2011-09-21 20:40:33 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
desc "Update all dependencies for testing Haml."
|
|
|
|
task :update do
|
|
|
|
with_each_gemfile {sh "bundle update"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
desc "Test all supported versions of rails. This takes a while."
|
|
|
|
task :rails_compatibility => 'test:bundles:install' do
|
|
|
|
`rm -rf test/rails`
|
|
|
|
`rm -rf test/plugins`
|
|
|
|
with_each_gemfile {sh "bundle exec rake test"}
|
2009-02-10 04:39:18 -05:00
|
|
|
end
|
2009-02-24 22:55:06 -05:00
|
|
|
end
|
2009-06-18 00:46:25 -04:00
|
|
|
|
|
|
|
# ----- Handling Updates -----
|
|
|
|
|
2010-03-20 06:10:02 -04:00
|
|
|
def email_on_error
|
2009-07-04 19:36:50 -04:00
|
|
|
yield
|
2010-03-20 06:10:02 -04:00
|
|
|
rescue Exception => e
|
|
|
|
IO.popen("sendmail nex342@gmail.com", "w") do |sm|
|
|
|
|
sm << "From: nex3@nex-3.com\n" <<
|
|
|
|
"To: nex342@gmail.com\n" <<
|
|
|
|
"Subject: Exception when running rake #{Rake.application.top_level_tasks.join(', ')}\n" <<
|
|
|
|
e.message << "\n\n" <<
|
|
|
|
e.backtrace.join("\n")
|
|
|
|
end
|
|
|
|
ensure
|
|
|
|
raise e if e
|
|
|
|
end
|
|
|
|
|
|
|
|
def ensure_git_cleanup
|
|
|
|
email_on_error {yield}
|
2009-07-04 19:36:50 -04:00
|
|
|
ensure
|
|
|
|
sh %{git reset --hard HEAD}
|
|
|
|
sh %{git clean -xdf}
|
|
|
|
sh %{git checkout master}
|
|
|
|
end
|
|
|
|
|
2009-06-18 00:46:25 -04:00
|
|
|
task :handle_update do
|
2010-03-20 06:10:02 -04:00
|
|
|
email_on_error do
|
2010-08-22 19:04:02 -04:00
|
|
|
unless ENV["REF"] =~ %r{^refs/heads/(master|stable|haml-pages)$}
|
2010-03-20 06:10:02 -04:00
|
|
|
puts "#{'=' * 20} Ignoring rake handle_update REF=#{ENV["REF"].inspect}"
|
|
|
|
next
|
|
|
|
end
|
|
|
|
branch = $1
|
|
|
|
|
|
|
|
puts
|
|
|
|
puts
|
|
|
|
puts '=' * 150
|
|
|
|
puts "Running rake handle_update REF=#{ENV["REF"].inspect}"
|
|
|
|
|
|
|
|
sh %{git fetch origin}
|
|
|
|
sh %{git checkout stable}
|
|
|
|
sh %{git reset --hard origin/stable}
|
|
|
|
sh %{git checkout master}
|
|
|
|
sh %{git reset --hard origin/master}
|
|
|
|
|
2010-08-22 19:04:02 -04:00
|
|
|
case branch
|
|
|
|
when "master"
|
2010-03-20 06:10:02 -04:00
|
|
|
sh %{rake release_edge --trace}
|
2010-08-22 19:04:02 -04:00
|
|
|
when "stable", "haml-pages"
|
|
|
|
sh %{rake pages --trace}
|
2010-03-20 06:10:02 -04:00
|
|
|
end
|
2009-06-25 03:51:23 -04:00
|
|
|
|
2010-03-20 06:10:02 -04:00
|
|
|
puts 'Done running handle_update'
|
|
|
|
puts '=' * 150
|
2009-06-18 00:46:25 -04:00
|
|
|
end
|
|
|
|
end
|