Skip to content
This repository
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 92 lines (81 sloc) 2.729 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
require 'rubygems'
require 'rake'

require 'spec/rake/spectask'
Spec::Rake::SpecTask.new(:spec) do |spec|
  spec.libs << 'lib' << 'spec'
  spec.spec_files = FileList['spec/**/*_spec.rb']
end

begin
  require 'cucumber/rake/task'
  Cucumber::Rake::Task.new(:features)
rescue LoadError
  task :features do
    abort "Cucumber is not available. In order to run features, you must: sudo gem install cucumber"
  end
end

task :default => :spec

require 'rake/rdoctask'
Rake::RDocTask.new do |rdoc|
  if File.exist?('VERSION.yml')
    require 'yaml'
    config = YAML.load(File.read('VERSION.yml'))
    version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
  else
    version = ""
  end

  rdoc.rdoc_dir = 'rdoc'
  rdoc.title = "Spork #{version}"
  rdoc.rdoc_files.include('README*')
  rdoc.rdoc_files.include('lib/**/*.rb')
end

desc "Test all supported versions of rails"
task :test_rails do
  FAIL_MSG = "!! FAIL !!"
  OK_MSG = "OK"
  UNSUPPORTED_MSG = "Unsupported"
  rails_gems = `gem list rails`.grep(/^rails\b/).first
  versions = rails_gems.scan(/\((.+)\)/).flatten.first.split(", ")
  versions_2_x_gems = versions.grep(/^2/)
  results = {}
  versions_2_x_gems.each do |version|
    if version < '2.0.5'
      puts "-----------------------------------------------------"
      puts "Rails #{version} is not officially supported by Spork"
      puts "Why? http://www.nabble.com/rspec-rails-fails-to-find-a-controller-name-td23223425.html"
      puts "-----------------------------------------------------"
      results[version] = UNSUPPORTED_MSG
      next
    end
    
    
    puts "Testing version #{version}"
    pid = Kernel.fork do
      test_files = %w[features/rspec_rails_integration.feature features/rails_delayed_loading_workarounds.feature]
      
      unless version < '2.1'
        # pending a fix, the following error happens with rails 2.0:
        # /opt/local/lib/ruby/gems/1.8/gems/cucumber-0.3.11/lib/cucumber/rails/world.rb:41:in `use_transactional_fixtures': undefined method `configuration' for Rails:Module (NoMethodError)
        test_files << "features/cucumber_rails_integration.feature "
      end
      exec("env RAILS_VERSION=#{version} cucumber #{test_files * ' '}; echo $? > result")
    end
    Process.waitpid(pid)
    result = File.read('result').chomp
    FileUtils.rm('result')
    if result=='0'
      results[version] = OK_MSG
    else
      results[version] = FAIL_MSG
    end
  end
  
  puts "Results:"
  File.open("TESTED_RAILS_VERSIONS.txt", 'wb') do |f|
    results.keys.sort.each do |version|
      s = "#{version}:\t#{results[version]}"
      f.puts(s)
      puts(s)
    end
  end
  if results.values.any? { |r| r == FAIL_MSG }
    exit 1
  else
    exit 0
  end
end
Something went wrong with that request. Please try again.