+++ /dev/null
-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=<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 <engine>/app or
-# <engine>/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