X-Git-Url: https://projects.mako.cc/source/selectricity-live/blobdiff_plain/a12d4f62752f546f57421244e370e79965706ffb..f7aee769411a893c1059c529a220c0d25c72974f:/vendor/plugins/engines/tasks/engines.rake diff --git a/vendor/plugins/engines/tasks/engines.rake b/vendor/plugins/engines/tasks/engines.rake new file mode 100644 index 0000000..21bb763 --- /dev/null +++ b/vendor/plugins/engines/tasks/engines.rake @@ -0,0 +1,176 @@ +module Engines + module RakeTasks + def self.all_engines + # An engine is informally defined as any subdirectory in vendor/plugins + # which ends in '_engine', '_bundle', or contains an 'init_engine.rb' file. + engine_base_dirs = ['vendor/plugins'] + # The engine root may be different; if possible try to include + # those directories too + if Engines.const_defined?(:CONFIG) + engine_base_dirs << Engines::CONFIG[:root] + end + engine_base_dirs.map! {|d| [d + '/*_engine/*', + d + '/*_bundle/*', + d + '/*/init_engine.rb']}.flatten! + engine_dirs = FileList.new(*engine_base_dirs) + engine_dirs.map do |engine| + File.basename(File.dirname(engine)) + end.uniq + end + end +end + + +namespace :engines do + desc "Display version information about active engines" + task :info => :environment do + if ENV["ENGINE"] + e = Engines.get(ENV["ENGINE"]) + header = "Details for engine '#{e.name}':" + puts header + puts "-" * header.length + puts "Version: #{e.version}" + puts "Details: #{e.info}" + else + puts "Engines plugin: #{Engines.version}" + Engines.each do |e| + puts "#{e.name}: #{e.version}" + end + end + end +end + +namespace :db do + namespace :fixtures do + namespace :engines do + + desc "Load plugin/engine fixtures into the current environment's database." + task :load => :environment do + require 'active_record/fixtures' + ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym) + plugin = ENV['ENGINE'] || '*' + Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', plugin, 'test', 'fixtures', '*.yml')).each do |fixture_file| + Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*')) + end + end + + end + end + + + namespace :migrate do + + desc "Migrate all engines. Target specific version with VERSION=x, specific engine with ENGINE=x" + task :engines => :environment do + engines_to_migrate = ENV["ENGINE"] ? [Engines.get(ENV["ENGINE"])].compact : Engines.active + if engines_to_migrate.empty? + puts "Couldn't find an engine called '#{ENV["ENGINE"]}'" + else + if ENV["VERSION"] && !ENV["ENGINE"] + # ignore the VERSION, since it makes no sense in this context; we wouldn't + # want to revert ALL engines to the same version because of a misttype + puts "Ignoring the given version (#{ENV["VERSION"]})." + puts "To control individual engine versions, use the ENGINE= argument" + else + engines_to_migrate.each do |engine| + Engines::EngineMigrator.current_engine = engine + migration_directory = File.join(engine.root, 'db', 'migrate') + if File.exist?(migration_directory) + puts "Migrating engine '#{engine.name}'" + Engines::EngineMigrator.migrate(migration_directory, ENV["VERSION"] ? ENV["VERSION"].to_i : nil) + else + puts "The db/migrate directory for engine '#{engine.name}' appears to be missing." + puts "Should be: #{migration_directory}" + end + end + if ActiveRecord::Base.schema_format == :ruby && !engines_to_migrate.empty? + Rake::Task[:db_schema_dump].invoke + end + end + end + end + + namespace :engines do + Engines::RakeTasks.all_engines.each do |engine_name| + desc "Migrate the '#{engine_name}' engine. Target specific version with VERSION=x" + task engine_name => :environment do + ENV['ENGINE'] = engine_name; Rake::Task['db:migrate:engines'].invoke + end + end + end + + end +end + + +# this is just a rip-off from the plugin stuff in railties/lib/tasks/documentation.rake, +# because the default plugindoc stuff doesn't support subdirectories like /app or +# /component. +namespace :doc do + + desc "Generate documation for all installed engines" + task :engines => Engines::RakeTasks.all_engines.map {|engine| "doc:engines:#{engine}"} + + namespace :engines do + # Define doc tasks for each engine + Engines::RakeTasks.all_engines.each do |engine_name| + desc "Generation documentation for the '#{engine_name}' engine" + task engine_name => :environment do + engine_base = "vendor/plugins/#{engine_name}" + options = [] + files = Rake::FileList.new + options << "-o doc/plugins/#{engine_name}" + options << "--title '#{engine_name.titlecase} Documentation'" + options << '--line-numbers --inline-source' + options << '--all' # include protected methods + options << '-T html' + + files.include("#{engine_base}/lib/**/*.rb") + files.include("#{engine_base}/app/**/*.rb") # include the app directory + files.include("#{engine_base}/components/**/*.rb") # include the components directory + if File.exists?("#{engine_base}/README") + files.include("#{engine_base}/README") + options << "--main '#{engine_base}/README'" + end + files.include("#{engine_base}/CHANGELOG") if File.exists?("#{engine_base}/CHANGELOG") + + options << files.to_s + + sh %(rdoc #{options * ' '}) + end + end + end +end + +namespace :test do + desc "Run the engine tests in vendor/plugins/**/test (or specify with ENGINE=name)" + # NOTE: we're using the Rails 1.0 non-namespaced task here, just to maintain + # compatibility with Rails 1.0 + # TODO: make this work with Engines.config(:root) + + namespace :engines do + Engines::RakeTasks.all_engines.each do |engine_name| + desc "Run the engine tests for '#{engine_name}'" + Rake::TestTask.new(engine_name => :prepare_test_database) do |t| + t.libs << 'test' + t.pattern = "vendor/plugins/#{engine_name}/test/**/*_test.rb" + t.verbose = true + end + end + end + + Rake::TestTask.new(:engines => [:warn_about_multiple_engines_testing, :prepare_test_database]) do |t| + t.libs << "test" + engines = ENV['ENGINE'] || '**' + t.pattern = "vendor/plugins/#{engines}/test/**/*_test.rb" + t.verbose = true + end + + task :warn_about_multiple_engines_testing do + puts %{-~============== A Moste Polite Warninge ==================~- +You may experience issues testing multiple engines at once. +Please test engines individual for the moment. +-~===============( ... as you were ... )===================~- +} + end +end \ No newline at end of file