require 'bundler' Bundler::GemHelper.install_tasks $:.unshift 'lib' require 'spec/version' require 'spec/rake/spectask' require 'spec/ruby' # Some of the tasks are in separate files since they are also part of the website documentation load 'resources/rake/examples.rake' load 'resources/rake/examples_with_rcov.rake' load 'resources/rake/failing_examples_with_html.rake' load 'resources/rake/verify_rcov.rake' task :cleanup_rcov_files do rm_rf 'coverage.data' end if RUBY_VERSION =~ /^1.8/ task :default => [:cleanup_rcov_files, :features, :verify_rcov] else task :default => [:spec, :features] end desc "Run all specs" Spec::Rake::SpecTask.new(:spec) do |t| t.spec_files = FileList['spec/**/*_spec.rb'] t.spec_opts = ['--options', 'spec/spec.opts'] end namespace :spec do desc "Run all specs with rcov" Spec::Rake::SpecTask.new(:rcov) do |t| t.spec_files = FileList['spec/**/*_spec.rb'] t.spec_opts = ['--options', 'spec/spec.opts'] t.rcov = true t.rcov_dir = 'coverage' t.rcov_opts = ['--exclude', "features,kernel,load-diff-lcs\.rb,instance_exec\.rb,lib/spec.rb,lib/spec/runner.rb,^spec/*,bin/spec,examples,/gems,/Library/Ruby,\.autotest,#{ENV['GEM_HOME']}"] t.rcov_opts << '--sort coverage --text-summary --aggregate coverage.data' end desc "Run files listed in spec/spec_files.txt" Spec::Rake::SpecTask.new(:focus) do |t| if File.exists?('spec/spec_files.txt') t.spec_files = File.readlines('spec/spec_files.txt').collect{|f| f.chomp} end end end begin require 'cucumber/rake/task' desc "Run Cucumber features" if RUBY_VERSION =~ /^1.8/ Cucumber::Rake::Task.new :features do |t| t.rcov = true t.rcov_opts = ['--exclude', "features,kernel,load-diff-lcs\.rb,instance_exec\.rb,lib/spec.rb,lib/spec/runner.rb,^spec/*,bin/spec,examples,/gems,/Library/Ruby,\.autotest,#{ENV['GEM_HOME']}"] t.rcov_opts << '--no-html --aggregate coverage.data' t.cucumber_opts = %w{--format progress} end else task :features do sh 'cucumber --profile no_heckle' end end rescue LoadError puts "You need cucumber installed to run cucumber tasks" end desc "Run failing examples (see failure output)" Spec::Rake::SpecTask.new('failing_examples') do |t| t.spec_files = FileList['failing_examples/**/*_spec.rb'] t.spec_opts = ['--options', 'spec/spec.opts'] end def egrep(pattern) Dir['**/*.rb'].each do |fn| count = 0 open(fn) do |f| while line = f.gets count += 1 if line =~ pattern puts "#{fn}:#{count}:#{line}" end end end end end desc "Look for TODO and FIXME tags in the code" task :todo do egrep /(FIXME|TODO|TBD)/ end desc "Verifies that there is no uncommitted code" task :verify_committed do IO.popen('git status') do |io| io.each_line do |line| raise "\n!!! Do a git commit first !!!\n\n" if line =~ /^#\s*modified:/ end end end task :clobber => :clobber_tmp task :clobber_tmp do cmd = %q[rm -r tmp] puts cmd system cmd if test ?d, 'tmp' end