redmine/vendor/plugins/engines/Rakefile
Eric Davis 7b0cb6aba8 Upgraded to Rails 2.3.4 (#3597)
* Ran the Rails upgrade
* Upgraded to Rails Engines 2.3.2
* Added a plugin to let Engines override application views.
* Converted tests to use the new classes:
** ActionController::TestCase for functional
** ActiveSupport::TestCase for units
* Converted ActiveRecord::Error message to a string.
* ActiveRecord grouping returns an ordered hash which doesn't have #sort!
* Updated the I18n storage_units format.
* Added some default initializers from a fresh rails app
* Changed the order of check_box_tags and hidden_field_tags.  The hidden tag
  needs to appear first in Rails 2.3, otherwise it will override any value in
  the check_box_tag.
* Removed the custom handler for when the cookie store is tampered with.
  Rails 2.3 removed the TamperedWithCookie exception and instead Rails will not
  load the data from it when it's been tampered with (e.g. no user login).
* Fixed mail layouts, 2.3 has problems with implicit multipart emails that
  use layouts.  Also removed some custom Redmine mailer code.
* Fixed a bug that occurred in tests where the "required" span tag would be
  added to the :field_status translation.  This resulted in an email string of:

    <li>Status<span class="required"> *</span><span class="required"> *</span>

  Instead of:

    <li>Status: New</li>

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2887 e93f8b46-1217-0410-a6f0-8f06a7374b81
2009-09-13 17:14:35 +00:00

227 lines
8.3 KiB
Ruby

require 'rake'
require 'rake/rdoctask'
require 'tmpdir'
task :default => :doc
desc 'Generate documentation for the engines plugin.'
Rake::RDocTask.new(:doc) do |doc|
doc.rdoc_dir = 'doc'
doc.title = 'Engines'
doc.main = "README"
doc.rdoc_files.include("README", "CHANGELOG", "MIT-LICENSE")
doc.rdoc_files.include('lib/**/*.rb')
doc.options << '--line-numbers' << '--inline-source'
end
desc 'Run the engine plugin tests within their test harness'
task :cruise do
# checkout the project into a temporary directory
version = "rails_2.0"
test_dir = "#{Dir.tmpdir}/engines_plugin_#{version}_test"
puts "Checking out test harness for #{version} into #{test_dir}"
`svn co http://svn.rails-engines.org/test/engines/#{version} #{test_dir}`
# run all the tests in this project
Dir.chdir(test_dir)
load 'Rakefile'
puts "Running all tests in test harness"
['db:migrate', 'test', 'test:plugins'].each do |t|
Rake::Task[t].invoke
end
end
task :clean => [:clobber_doc, "test:clean"]
namespace :test do
# Yields a block with STDOUT and STDERR silenced. If you *really* want
# to output something, the block is yielded with the original output
# streams, i.e.
#
# silence do |o, e|
# puts 'hello!' # no output produced
# o.puts 'hello!' # output on STDOUT
# end
#
# (based on silence_stream in ActiveSupport.)
def silence
yield(STDOUT, STDERR) if ENV['VERBOSE']
streams = [STDOUT, STDERR]
actual_stdout = STDOUT.dup
actual_stderr = STDERR.dup
streams.each do |s|
s.reopen(RUBY_PLATFORM =~ /mswin/ ? 'NUL:' : '/dev/null')
s.sync = true
end
yield actual_stdout, actual_stderr
ensure
STDOUT.reopen(actual_stdout)
STDERR.reopen(actual_stderr)
end
def test_app_dir
File.join(File.dirname(__FILE__), 'test_app')
end
def run(cmd)
cmd = cmd.join(" && ") if cmd.is_a?(Array)
system(cmd) || raise("failed running '#{cmd}'")
end
desc 'Remove the test application'
task :clean do
FileUtils.rm_r(test_app_dir) if File.exist?(test_app_dir)
end
desc 'Build the test rails application (use RAILS=[edge,<directory>] to test against specific version)'
task :generate_app do
silence do |out, err|
out.puts "> Creating test application at #{test_app_dir}"
if ENV['RAILS']
vendor_dir = File.join(test_app_dir, 'vendor')
FileUtils.mkdir_p vendor_dir
if ENV['RAILS'] == 'edge'
out.puts " Cloning Edge Rails from GitHub"
run "cd #{vendor_dir} && git clone --depth 1 git://github.com/rails/rails.git"
elsif ENV['RAILS'] =~ /\d\.\d\.\d/
if ENV['CURL']
out.puts " Cloning Rails Tag #{ENV['RAILS']} from GitHub using curl and tar"
run ["cd #{vendor_dir}",
"mkdir rails",
"cd rails",
"curl -s -L http://github.com/rails/rails/tarball/#{ENV['RAILS']} | tar xzv --strip-components 1"]
else
out.puts " Cloning Rails Tag #{ENV['RAILS']} from GitHub (can be slow - set CURL=true to use curl)"
run ["cd #{vendor_dir}",
"git clone git://github.com/rails/rails.git",
"cd rails",
"git pull",
"git checkout v#{ENV['RAILS']}"]
end
elsif File.exist?(ENV['RAILS'])
out.puts " Linking rails from #{ENV['RAILS']}"
run "cd #{vendor_dir} && ln -s #{ENV['RAILS']} rails"
else
raise "Couldn't build test application from '#{ENV['RAILS']}'"
end
out.puts " generating rails default directory structure"
run "ruby #{File.join(vendor_dir, 'rails', 'railties', 'bin', 'rails')} #{test_app_dir}"
else
version = `rails --version`.chomp.split.last
out.puts " building rails using the 'rails' command (rails version: #{version})"
run "rails #{test_app_dir}"
end
# get the database config and schema in place
out.puts " writing database.yml"
require 'yaml'
File.open(File.join(test_app_dir, 'config', 'database.yml'), 'w') do |f|
f.write(%w(development test).inject({}) do |h, env|
h[env] = {"adapter" => "sqlite3", "database" => "engines_#{env}.sqlite3"} ; h
end.to_yaml)
end
out.puts " installing exception_notification plugin"
run "cd #{test_app_dir} && ./script/plugin install git://github.com/rails/exception_notification.git"
end
end
# We can't link the plugin, as it needs to be present for script/generate to find
# the plugin generator.
# TODO: find and +1/create issue for loading generators from symlinked plugins
desc 'Mirror the engines plugin into the test application'
task :copy_engines_plugin do
puts "> Copying engines plugin into test application"
engines_plugin = File.join(test_app_dir, "vendor", "plugins", "engines")
FileUtils.rm_r(engines_plugin) if File.exist?(engines_plugin)
FileUtils.mkdir_p(engines_plugin)
FileList["*"].exclude("test_app").each do |file|
FileUtils.cp_r(file, engines_plugin)
end
end
def insert_line(line, options)
line = line + "\n"
target_file = File.join(test_app_dir, options[:into])
lines = File.readlines(target_file)
return if lines.include?(line)
if options[:after]
if options[:after].is_a?(String)
after_line = options[:after] + "\n"
else
after_line = lines.find { |l| l =~ options[:after] }
raise "couldn't find a line matching #{options[:after].inspect} in #{target_file}" unless after_line
end
index = lines.index(after_line)
raise "couldn't find line '#{after_line}' in #{target_file}" unless index
lines.insert(index + 1, line)
else
lines << line
end
File.open(target_file, 'w') { |f| f.write lines.join }
end
def mirror_test_files(src, dest=nil)
destination_dir = File.join(*([test_app_dir, dest].compact))
FileUtils.cp_r(File.join(File.dirname(__FILE__), 'test', src), destination_dir)
end
desc 'Update the plugin and tests files in the test application from the plugin'
task :mirror_engine_files => [:test_app, :copy_engines_plugin] do
puts "> Tweaking generated application to be suitable for testing"
# Replace the Rails plugin loader with the engines one.
insert_line("require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot')",
:into => 'config/environment.rb',
:after => "require File.join(File.dirname(__FILE__), 'boot')")
# Add the engines test helper to handle fixtures & stuff.
insert_line("require 'engines_test_helper'", :into => 'test/test_helper.rb')
# Run engine plugin tests when running the application
insert_line("task :test => ['test:engines:all']", :into => 'Rakefile')
# We want exceptions to be raised
insert_line("def rescue_action(e) raise e end;",
:into => "app/controllers/application_controller.rb",
:after => "class ApplicationController < ActionController::Base")
# We need this method to test where actions are being rendered from.
insert_line("include RenderInformation",
:into => "app/controllers/application_controller.rb",
:after => "class ApplicationController < ActionController::Base")
puts "> Mirroring test application files into #{test_app_dir}"
mirror_test_files('app')
mirror_test_files('lib')
mirror_test_files('plugins', 'vendor')
mirror_test_files('unit', 'test')
mirror_test_files('functional', 'test')
end
desc 'Prepare the engines test environment'
task :test_app do
version_tag = File.join(test_app_dir, 'RAILS_VERSION')
existing_version = File.read(version_tag).chomp rescue 'unknown'
if existing_version == ENV['RAILS']
puts "> Reusing existing test application (#{ENV['RAILS']})"
else
puts "> Recreating test application"
Rake::Task["test:clean"].invoke
Rake::Task["test:generate_app"].invoke
File.open(version_tag, "w") { |f| f.write ENV['RAILS'] }
end
end
end
task :test => "test:mirror_engine_files" do
puts "> Loading the test application environment and running tests"
# We use exec here to replace the current running rake process
exec("cd #{test_app_dir} && rake db:migrate && rake")
end