From: Jean-Philippe Lang Date: Thu, 24 Mar 2011 18:46:12 +0000 (+0000) Subject: Moved plugin tasks directories to lib/tasks (Rails deprecation). X-Git-Tag: 1.2.0~628 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=91b1f9be5179f6dd5d0e244e0464b24a24d6317c;p=redmine.git Moved plugin tasks directories to lib/tasks (Rails deprecation). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5216 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/vendor/plugins/engines/lib/tasks/engines.rake b/vendor/plugins/engines/lib/tasks/engines.rake new file mode 100644 index 000000000..231cd025a --- /dev/null +++ b/vendor/plugins/engines/lib/tasks/engines.rake @@ -0,0 +1,281 @@ +# This code lets us redefine existing Rake tasks, which is extremely +# handy for modifying existing Rails rake tasks. +# Credit for the original snippet of code goes to Jeremy Kemper +# http://pastie.caboo.se/9620 +unless Rake::TaskManager.methods.include?('redefine_task') + module Rake + module TaskManager + def redefine_task(task_class, args, &block) + task_name, arg_names, deps = resolve_args([args]) + task_name = task_class.scope_name(@scope, task_name) + deps = [deps] unless deps.respond_to?(:to_ary) + deps = deps.collect {|d| d.to_s } + task = @tasks[task_name.to_s] = task_class.new(task_name, self) + task.application = self + task.add_description(@last_description) + @last_description = nil + task.enhance(deps, &block) + task + end + + end + class Task + class << self + def redefine_task(args, &block) + Rake.application.redefine_task(self, [args], &block) + end + end + end + end +end + +namespace :db do + namespace :migrate do + desc 'Migrate database and plugins to current status.' + task :all => [ 'db:migrate', 'db:migrate:plugins' ] + + desc 'Migrate plugins to current status.' + task :plugins => :environment do + Engines.plugins.each do |plugin| + next unless plugin.respond_to?(:migration_directory) + next unless File.exists? plugin.migration_directory + puts "Migrating plugin #{plugin.name} ..." + plugin.migrate + end + end + + desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table' + task :upgrade_plugin_migrations => :environment do + svens_fork_table_name = 'plugin_schema_migrations' + + # Check if app was previously using Sven's fork + if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name) + old_sm_table = svens_fork_table_name + else + old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table) + end + + unless ActiveRecord::Base.connection.table_exists?(old_sm_table) + abort "Cannot find old migration table - assuming nothing needs to be done" + end + + # There are two forms of the engines schema info - pre-fix_plugin_migrations and post + # We need to figure this out before we continue. + + results = ActiveRecord::Base.connection.select_rows( + "SELECT version, plugin_name FROM #{old_sm_table}" + ).uniq + + def insert_new_version(plugin_name, version) + version_string = "#{version}-#{plugin_name}" + new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name + + # Check if the row already exists for some reason - maybe run this task more than once. + return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0 + + puts "Inserting new version #{version} for plugin #{plugin_name}.." + ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})") + end + + # We need to figure out if they already used "fix_plugin_migrations" + versions = {} + results.each do |r| + versions[r[1]] ||= [] + versions[r[1]] << r[0].to_i + end + + if versions.values.find{ |v| v.size > 1 } == nil + puts "Fixing migration info" + # We only have one listed migration per plugin - this is pre-fix_plugin_migrations, + # so we build all versions required. In this case, all migrations should + versions.each do |plugin_name, version| + version = version[0] # There is only one version + + # We have to make an assumption that numeric migrations won't get this long.. + # I'm not sure if there is a better assumption, it should work in all + # current cases.. (touch wood..) + if version.to_s.size < "YYYYMMDDHHMMSS".size + # Insert version records for each migration + (1..version).each do |v| + insert_new_version(plugin_name, v) + end + else + # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... + # The case in which this occurs is very rare.. + insert_new_version(plugin_name, version) + end + end + else + puts "Moving migration info" + # We have multiple migrations listed per plugin - thus we can assume they have + # already applied fix_plugin_migrations - we just copy it across verbatim + versions.each do |plugin_name, version| + version.each { |v| insert_new_version(plugin_name, v) } + end + end + + puts "Migration info successfully migrated - removing old schema info table" + ActiveRecord::Base.connection.drop_table(old_sm_table) + end + + desc 'Migrate a specified plugin.' + task(:plugin => :environment) do + name = ENV['NAME'] + if plugin = Engines.plugins[name] + version = ENV['VERSION'] + puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..." + plugin.migrate(version ? version.to_i : nil) + else + puts "Plugin #{name} does not exist." + end + end + end +end + + +namespace :db do + namespace :fixtures do + namespace :plugins do + + desc "Load plugin fixtures into the current environment's database." + task :load => :environment do + require 'active_record/fixtures' + ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym) + Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', + 'test', 'fixtures', '*.yml')).each do |fixture_file| + Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*')) + end + end + + end + end +end + +# this is just a modification of the original task in railties/lib/tasks/documentation.rake, +# because the default task doesn't support subdirectories like /app or +# /component. These tasks now include every file under a plugin's load paths (see +# Plugin#load_paths). +namespace :doc do + + plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) } + + namespace :plugins do + + # Define doc tasks for each plugin + plugins.each do |plugin| + desc "Create plugin documentation for '#{plugin}'" + Rake::Task.redefine_task(plugin => :environment) do + plugin_base = RAILS_ROOT + "/vendor/plugins/#{plugin}" + options = [] + files = Rake::FileList.new + options << "-o doc/plugins/#{plugin}" + options << "--title '#{plugin.titlecase} Plugin Documentation'" + options << '--line-numbers' << '--inline-source' + options << '-T html' + + # Include every file in the plugin's load_paths (see Plugin#load_paths) + if Engines.plugins[plugin] + files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb") + end + if File.exists?("#{plugin_base}/README") + files.include("#{plugin_base}/README") + options << "--main '#{plugin_base}/README'" + end + files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG") + + if files.empty? + puts "No source files found in #{plugin_base}. No documentation will be generated." + else + options << files.to_s + sh %(rdoc #{options * ' '}) + end + end + end + end +end + + + +namespace :test do + task :warn_about_multiple_plugin_testing_with_engines do + puts %{-~============== A Moste Polite Warninge ===========================~- + +You may experience issues testing multiple plugins at once when using +the code-mixing features that the engines plugin provides. If you do +experience any problems, please test plugins individually, i.e. + + $ rake test:plugins PLUGIN=my_plugin + +or use the per-type plugin test tasks: + + $ rake test:plugins:units + $ rake test:plugins:functionals + $ rake test:plugins:integration + $ rake test:plugins:all + +Report any issues on http://dev.rails-engines.org. Thanks! + +-~===============( ... as you were ... )============================~-} + end + + namespace :engines do + + def engine_plugins + Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",") + end + + desc "Run tests from within engines plugins (plugins with an 'app' directory)" + task :all => [:units, :functionals, :integration] + + desc "Run unit tests from within engines plugins (plugins with an 'app' directory)" + Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t| + t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb" + t.verbose = true + end + + desc "Run functional tests from within engines plugins (plugins with an 'app' directory)" + Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t| + t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb" + t.verbose = true + end + + desc "Run integration tests from within engines plugins (plugins with an 'app' directory)" + Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t| + t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb" + t.verbose = true + end + end + + namespace :plugins do + + desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)" + task :all => [:warn_about_multiple_plugin_testing_with_engines, + :units, :functionals, :integration] + + desc "Run all plugin unit tests" + Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t| + t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb" + t.verbose = true + end + + desc "Run all plugin functional tests" + Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t| + t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb" + t.verbose = true + end + + desc "Integration test engines" + Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t| + t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb" + t.verbose = true + end + + desc "Mirrors plugin fixtures into a single location to help plugin tests" + task :setup_plugin_fixtures => :environment do + Engines::Testing.setup_plugin_fixtures + end + + # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite + Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures" + end +end diff --git a/vendor/plugins/engines/tasks/engines.rake b/vendor/plugins/engines/tasks/engines.rake deleted file mode 100644 index 231cd025a..000000000 --- a/vendor/plugins/engines/tasks/engines.rake +++ /dev/null @@ -1,281 +0,0 @@ -# This code lets us redefine existing Rake tasks, which is extremely -# handy for modifying existing Rails rake tasks. -# Credit for the original snippet of code goes to Jeremy Kemper -# http://pastie.caboo.se/9620 -unless Rake::TaskManager.methods.include?('redefine_task') - module Rake - module TaskManager - def redefine_task(task_class, args, &block) - task_name, arg_names, deps = resolve_args([args]) - task_name = task_class.scope_name(@scope, task_name) - deps = [deps] unless deps.respond_to?(:to_ary) - deps = deps.collect {|d| d.to_s } - task = @tasks[task_name.to_s] = task_class.new(task_name, self) - task.application = self - task.add_description(@last_description) - @last_description = nil - task.enhance(deps, &block) - task - end - - end - class Task - class << self - def redefine_task(args, &block) - Rake.application.redefine_task(self, [args], &block) - end - end - end - end -end - -namespace :db do - namespace :migrate do - desc 'Migrate database and plugins to current status.' - task :all => [ 'db:migrate', 'db:migrate:plugins' ] - - desc 'Migrate plugins to current status.' - task :plugins => :environment do - Engines.plugins.each do |plugin| - next unless plugin.respond_to?(:migration_directory) - next unless File.exists? plugin.migration_directory - puts "Migrating plugin #{plugin.name} ..." - plugin.migrate - end - end - - desc 'For engines coming from Rails version < 2.0 or for those previously updated to work with Sven Fuch\'s fork of engines, you need to upgrade the schema info table' - task :upgrade_plugin_migrations => :environment do - svens_fork_table_name = 'plugin_schema_migrations' - - # Check if app was previously using Sven's fork - if ActiveRecord::Base.connection.table_exists?(svens_fork_table_name) - old_sm_table = svens_fork_table_name - else - old_sm_table = ActiveRecord::Migrator.proper_table_name(Engines.schema_info_table) - end - - unless ActiveRecord::Base.connection.table_exists?(old_sm_table) - abort "Cannot find old migration table - assuming nothing needs to be done" - end - - # There are two forms of the engines schema info - pre-fix_plugin_migrations and post - # We need to figure this out before we continue. - - results = ActiveRecord::Base.connection.select_rows( - "SELECT version, plugin_name FROM #{old_sm_table}" - ).uniq - - def insert_new_version(plugin_name, version) - version_string = "#{version}-#{plugin_name}" - new_sm_table = ActiveRecord::Migrator.schema_migrations_table_name - - # Check if the row already exists for some reason - maybe run this task more than once. - return if ActiveRecord::Base.connection.select_rows("SELECT * FROM #{new_sm_table} WHERE version = #{version_string.dump.gsub("\"", "'")}").size > 0 - - puts "Inserting new version #{version} for plugin #{plugin_name}.." - ActiveRecord::Base.connection.insert("INSERT INTO #{new_sm_table} (version) VALUES (#{version_string.dump.gsub("\"", "'")})") - end - - # We need to figure out if they already used "fix_plugin_migrations" - versions = {} - results.each do |r| - versions[r[1]] ||= [] - versions[r[1]] << r[0].to_i - end - - if versions.values.find{ |v| v.size > 1 } == nil - puts "Fixing migration info" - # We only have one listed migration per plugin - this is pre-fix_plugin_migrations, - # so we build all versions required. In this case, all migrations should - versions.each do |plugin_name, version| - version = version[0] # There is only one version - - # We have to make an assumption that numeric migrations won't get this long.. - # I'm not sure if there is a better assumption, it should work in all - # current cases.. (touch wood..) - if version.to_s.size < "YYYYMMDDHHMMSS".size - # Insert version records for each migration - (1..version).each do |v| - insert_new_version(plugin_name, v) - end - else - # If the plugin is new-format "YYYYMMDDHHMMSS", we just copy it across... - # The case in which this occurs is very rare.. - insert_new_version(plugin_name, version) - end - end - else - puts "Moving migration info" - # We have multiple migrations listed per plugin - thus we can assume they have - # already applied fix_plugin_migrations - we just copy it across verbatim - versions.each do |plugin_name, version| - version.each { |v| insert_new_version(plugin_name, v) } - end - end - - puts "Migration info successfully migrated - removing old schema info table" - ActiveRecord::Base.connection.drop_table(old_sm_table) - end - - desc 'Migrate a specified plugin.' - task(:plugin => :environment) do - name = ENV['NAME'] - if plugin = Engines.plugins[name] - version = ENV['VERSION'] - puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..." - plugin.migrate(version ? version.to_i : nil) - else - puts "Plugin #{name} does not exist." - end - end - end -end - - -namespace :db do - namespace :fixtures do - namespace :plugins do - - desc "Load plugin fixtures into the current environment's database." - task :load => :environment do - require 'active_record/fixtures' - ActiveRecord::Base.establish_connection(RAILS_ENV.to_sym) - Dir.glob(File.join(RAILS_ROOT, 'vendor', 'plugins', ENV['PLUGIN'] || '**', - 'test', 'fixtures', '*.yml')).each do |fixture_file| - Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*')) - end - end - - end - end -end - -# this is just a modification of the original task in railties/lib/tasks/documentation.rake, -# because the default task doesn't support subdirectories like /app or -# /component. These tasks now include every file under a plugin's load paths (see -# Plugin#load_paths). -namespace :doc do - - plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) } - - namespace :plugins do - - # Define doc tasks for each plugin - plugins.each do |plugin| - desc "Create plugin documentation for '#{plugin}'" - Rake::Task.redefine_task(plugin => :environment) do - plugin_base = RAILS_ROOT + "/vendor/plugins/#{plugin}" - options = [] - files = Rake::FileList.new - options << "-o doc/plugins/#{plugin}" - options << "--title '#{plugin.titlecase} Plugin Documentation'" - options << '--line-numbers' << '--inline-source' - options << '-T html' - - # Include every file in the plugin's load_paths (see Plugin#load_paths) - if Engines.plugins[plugin] - files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb") - end - if File.exists?("#{plugin_base}/README") - files.include("#{plugin_base}/README") - options << "--main '#{plugin_base}/README'" - end - files.include("#{plugin_base}/CHANGELOG") if File.exists?("#{plugin_base}/CHANGELOG") - - if files.empty? - puts "No source files found in #{plugin_base}. No documentation will be generated." - else - options << files.to_s - sh %(rdoc #{options * ' '}) - end - end - end - end -end - - - -namespace :test do - task :warn_about_multiple_plugin_testing_with_engines do - puts %{-~============== A Moste Polite Warninge ===========================~- - -You may experience issues testing multiple plugins at once when using -the code-mixing features that the engines plugin provides. If you do -experience any problems, please test plugins individually, i.e. - - $ rake test:plugins PLUGIN=my_plugin - -or use the per-type plugin test tasks: - - $ rake test:plugins:units - $ rake test:plugins:functionals - $ rake test:plugins:integration - $ rake test:plugins:all - -Report any issues on http://dev.rails-engines.org. Thanks! - --~===============( ... as you were ... )============================~-} - end - - namespace :engines do - - def engine_plugins - Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",") - end - - desc "Run tests from within engines plugins (plugins with an 'app' directory)" - task :all => [:units, :functionals, :integration] - - desc "Run unit tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb" - t.verbose = true - end - - desc "Run functional tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb" - t.verbose = true - end - - desc "Run integration tests from within engines plugins (plugins with an 'app' directory)" - Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t| - t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb" - t.verbose = true - end - end - - namespace :plugins do - - desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)" - task :all => [:warn_about_multiple_plugin_testing_with_engines, - :units, :functionals, :integration] - - desc "Run all plugin unit tests" - Rake::TestTask.new(:units => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/unit/**/*_test.rb" - t.verbose = true - end - - desc "Run all plugin functional tests" - Rake::TestTask.new(:functionals => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/functional/**/*_test.rb" - t.verbose = true - end - - desc "Integration test engines" - Rake::TestTask.new(:integration => :setup_plugin_fixtures) do |t| - t.pattern = "vendor/plugins/#{ENV['PLUGIN'] || "**"}/test/integration/**/*_test.rb" - t.verbose = true - end - - desc "Mirrors plugin fixtures into a single location to help plugin tests" - task :setup_plugin_fixtures => :environment do - Engines::Testing.setup_plugin_fixtures - end - - # Patch the default plugin testing task to have setup_plugin_fixtures as a prerequisite - Rake::Task["test:plugins"].prerequisites << "test:plugins:setup_plugin_fixtures" - end -end diff --git a/vendor/plugins/open_id_authentication/lib/tasks/open_id_authentication_tasks.rake b/vendor/plugins/open_id_authentication/lib/tasks/open_id_authentication_tasks.rake new file mode 100644 index 000000000..c71434a50 --- /dev/null +++ b/vendor/plugins/open_id_authentication/lib/tasks/open_id_authentication_tasks.rake @@ -0,0 +1,30 @@ +namespace :open_id_authentication do + namespace :db do + desc "Creates authentication tables for use with OpenIdAuthentication" + task :create => :environment do + generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"]) + end + + desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x" + task :upgrade => :environment do + generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"]) + end + + def generate_migration(args) + require 'rails_generator' + require 'rails_generator/scripts/generate' + + if ActiveRecord::Base.connection.supports_migrations? + Rails::Generator::Scripts::Generate.new.run(args) + else + raise "Task unavailable to this database (no migration support)" + end + end + + desc "Clear the authentication tables" + task :clear => :environment do + OpenIdAuthentication::DbStore.cleanup_nonces + OpenIdAuthentication::DbStore.cleanup_associations + end + end +end diff --git a/vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake b/vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake deleted file mode 100644 index c71434a50..000000000 --- a/vendor/plugins/open_id_authentication/tasks/open_id_authentication_tasks.rake +++ /dev/null @@ -1,30 +0,0 @@ -namespace :open_id_authentication do - namespace :db do - desc "Creates authentication tables for use with OpenIdAuthentication" - task :create => :environment do - generate_migration(["open_id_authentication_tables", "add_open_id_authentication_tables"]) - end - - desc "Upgrade authentication tables from ruby-openid 1.x.x to 2.x.x" - task :upgrade => :environment do - generate_migration(["upgrade_open_id_authentication_tables", "upgrade_open_id_authentication_tables"]) - end - - def generate_migration(args) - require 'rails_generator' - require 'rails_generator/scripts/generate' - - if ActiveRecord::Base.connection.supports_migrations? - Rails::Generator::Scripts::Generate.new.run(args) - else - raise "Task unavailable to this database (no migration support)" - end - end - - desc "Clear the authentication tables" - task :clear => :environment do - OpenIdAuthentication::DbStore.cleanup_nonces - OpenIdAuthentication::DbStore.cleanup_associations - end - end -end