# -*- ruby -*- require 'rubygems' require 'hoe' require './lib/spec' require './lib/spec/rake/spectask' Hoe.new('rspec', Spec::VERSION::STRING) do |p| p.summary = Spec::VERSION::DESCRIPTION p.rubyforge_name = 'rspec' p.developer('RSpec Development Team', 'dev@rspec.info') end ['audit','test','test_deps','default'].each do |task| Rake.application.instance_variable_get('@tasks').delete(task) end task :default => ['spec'] # vim: syntax=Ruby # $:.unshift('lib') # require 'rubygems' # require 'rake/gempackagetask' # require 'rake/contrib/rubyforgepublisher' # require 'rake/clean' # require 'rake/rdoctask' # require 'rake/testtask' # require 'spec/version' # dir = File.dirname(__FILE__) # # # Some of the tasks are in separate files since they are also part of the website documentation # load File.dirname(__FILE__) + '/rake_tasks/examples.rake' # load File.dirname(__FILE__) + '/rake_tasks/examples_with_rcov.rake' # load File.dirname(__FILE__) + '/rake_tasks/failing_examples_with_html.rake' # load File.dirname(__FILE__) + '/rake_tasks/verify_rcov.rake' # # PKG_NAME = "rspec" # PKG_VERSION = Spec::VERSION::STRING # PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" # PKG_FILES = FileList[ # '[A-Z]*', # 'lib/**/*.rb', # 'spec/**/*', # 'examples/**/*', # 'failing_examples/**/*', # 'plugins/**/*', # 'stories/**/*', # 'rake_tasks/**/*' # ] # # task :default => [:verify_rcov] # task :verify_rcov => [:spec, :stories] # desc "Run all specs" Spec::Rake::SpecTask.new do |t| t.spec_files = FileList['spec/**/*_spec.rb'] t.spec_opts = ['--options', 'spec/spec.opts'] unless ENV['NO_RCOV'] t.rcov = true t.rcov_dir = '../doc/output/coverage' t.rcov_opts = ['--exclude', 'lib/spec.rb,lib/spec/runner.rb,spec\/spec,bin\/spec,examples,\/var\/lib\/gems,\/Library\/Ruby,\.autotest'] end end # # desc "Run all stories" # task :stories do # html = 'story_server/prototype/rspec_stories.html' # ruby "stories/all.rb --colour --format plain --format html:#{html}" # unless IO.read(html) =~ //m # raise 'highlighted parameters are broken in story HTML' # end # end # # desc "Run all specs and store html output in doc/output/report.html" # Spec::Rake::SpecTask.new('spec_html') do |t| # t.spec_files = FileList['spec/**/*_spec.rb'] # t.spec_opts = ['--format html:../../../../doc/output/report.html', '--format progress','--backtrace'] # end # # desc "Run all failing examples" # Spec::Rake::SpecTask.new('failing_examples') do |t| # t.spec_files = FileList['failing_examples/**/*_spec.rb'] # end # # desc 'Generate RDoc' # rd = Rake::RDocTask.new do |rdoc| # rdoc.rdoc_dir = '../doc/output/rdoc' # rdoc.options << '--title' << 'RSpec' << '--line-numbers' << '--inline-source' << '--main' << 'README' # rdoc.rdoc_files.include('README', 'CHANGES', 'MIT-LICENSE', 'lib/**/*.rb') # end # # spec = Gem::Specification.new do |s| # s.name = PKG_NAME # s.version = PKG_VERSION # s.summary = Spec::VERSION::DESCRIPTION # s.description = <<-EOF # RSpec is a behaviour driven development (BDD) framework for Ruby. RSpec was # created in response to Dave Astels' article _A New Look at Test Driven Development_ # which can be read at: http://daveastels.com/index.php?p=5 RSpec is intended to # provide the features discussed in Dave's article. # EOF # # s.files = PKG_FILES.to_a # s.require_path = 'lib' # # s.has_rdoc = true # s.rdoc_options = rd.options # s.extra_rdoc_files = rd.rdoc_files.reject { |fn| fn =~ /\.rb$|^EXAMPLES.rd$/ }.to_a # # s.bindir = 'bin' # s.executables = ['spec', 'spec_translator', 'autospec'] # s.default_executable = 'spec' # s.author = "RSpec Development Team" # s.email = "rspec-devel@rubyforge.org" # s.homepage = "http://rspec.rubyforge.org" # s.platform = Gem::Platform::RUBY # s.rubyforge_project = "rspec" # end # # Rake::GemPackageTask.new(spec) do |pkg| # pkg.need_zip = true # pkg.need_tar = true # 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 # # task :release => [:verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_news] # # 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 # # desc "Creates a tag in svn" # task :tag do # # from = `svn info #{File.dirname(__FILE__)}`.match(/URL: (.*)\/rspec/n)[1] # # to = from.gsub(/trunk/, "tags/#{Spec::VERSION::TAG}") # # current = from.gsub(/trunk/, "tags/CURRENT") # # # # puts "Creating tag in SVN" # # tag_cmd = "svn cp #{from} #{to} -m \"Tag release #{Spec::VERSION::FULL_VERSION}\"" # # `#{tag_cmd}` ; raise "ERROR: #{tag_cmd}" unless $? == 0 # # # # puts "Removing CURRENT" # # remove_current_cmd = "svn rm #{current} -m \"Remove tags/CURRENT\"" # # `#{remove_current_cmd}` ; raise "ERROR: #{remove_current_cmd}" unless $? == 0 # # # # puts "Re-Creating CURRENT" # # create_current_cmd = "svn cp #{to} #{current} -m \"Copy #{Spec::VERSION::TAG} to tags/CURRENT\"" # # `#{create_current_cmd}` ; "ERROR: #{create_current_cmd}" unless $? == 0 # end # # task :verify_user do # raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER'] # end # # desc "Upload Website to RubyForge" # task :publish_website => [:verify_user, :website] do # unless Spec::VERSION::RELEASE_CANDIDATE # publisher = Rake::SshDirPublisher.new( # "rspec-website@rubyforge.org", # "/var/www/gforge-projects/#{PKG_NAME}", # "../doc/output" # ) # publisher.upload # else # puts "** Not publishing packages to RubyForge - this is a prerelease" # end # end # # desc "Upload Website archive to RubyForge" # task :archive_website => [:verify_user, :website] do # publisher = Rake::SshDirPublisher.new( # "rspec-website@rubyforge.org", # "/var/www/gforge-projects/#{PKG_NAME}/#{Spec::VERSION::TAG}", # "../doc/output" # ) # publisher.upload # end # # desc "Package the Rails plugin" # task :package_rspec_on_rails do # mkdir 'pkg' rescue nil # rm_rf "pkg/rspec-rails-#{PKG_VERSION}" rescue nil # `git clone ../rspec-rails pkg/rspec-rails-#{PKG_VERSION}` # rm_rf "pkg/rspec-rails-#{PKG_VERSION}/.git" # Dir.chdir 'pkg' do # `tar cvzf rspec-rails-#{PKG_VERSION}.tgz rspec-rails-#{PKG_VERSION}` # end # end # task :pkg => :package_rspec_on_rails # # desc "Package the RSpec.tmbundle" # task :package_tmbundle do # mkdir 'pkg' rescue nil # rm_rf "pkg/RSpec-#{PKG_VERSION}.tmbundle" rescue nil # `git clone ../../../../RSpec.tmbundle pkg/RSpec-#{PKG_VERSION}.tmbundle` # rm_rf "pkg/RSpec-#{PKG_VERSION}.tmbundle/.git" # Dir.chdir 'pkg' do # `tar cvzf RSpec-#{PKG_VERSION}.tmbundle.tgz RSpec-#{PKG_VERSION}.tmbundle` # end # end # task :pkg => :package_tmbundle # # desc "Publish gem+tgz+zip on RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file" # task :publish_packages => [:verify_user, :package, :pkg] do # release_files = FileList[ # "pkg/#{PKG_FILE_NAME}.gem", # "pkg/#{PKG_FILE_NAME}.tgz", # "pkg/rspec-rails-#{PKG_VERSION}.tgz", # "pkg/#{PKG_FILE_NAME}.zip", # "pkg/RSpec-#{PKG_VERSION}.tmbundle.tgz" # ] # unless Spec::VERSION::RELEASE_CANDIDATE # require 'meta_project' # require 'rake/contrib/xforge' # # Rake::XForge::Release.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |xf| # # Never hardcode user name and password in the Rakefile! # xf.user_name = ENV['RUBYFORGE_USER'] # xf.files = release_files.to_a # xf.release_name = "RSpec #{PKG_VERSION}" # end # else # puts "SINCE THIS IS A PRERELEASE, FILES ARE UPLOADED WITH SSH, NOT TO THE RUBYFORGE FILE SECTION" # puts "YOU MUST TYPE THE PASSWORD #{release_files.length} TIMES..." # # host = "rspec-website@rubyforge.org" # remote_dir = "/var/www/gforge-projects/#{PKG_NAME}" # # publisher = Rake::SshFilePublisher.new( # host, # remote_dir, # File.dirname(__FILE__), # *release_files # ) # publisher.upload # # puts "UPLADED THE FOLLOWING FILES:" # release_files.each do |file| # name = file.match(/pkg\/(.*)/)[1] # puts "* http://rspec.rubyforge.org/#{name}" # end # # puts "They are not linked to anywhere, so don't forget to tell people!" # end # end # # desc "Publish news on RubyForge" # task :publish_news => [:verify_user] do # unless Spec::VERSION::RELEASE_CANDIDATE # require 'meta_project' # require 'rake/contrib/xforge' # Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news| # # Never hardcode user name and password in the Rakefile! # news.user_name = ENV['RUBYFORGE_USER'] # end # else # puts "** Not publishing news to RubyForge - this is a prerelease" # end # end