diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb index 62dc7f30f8..b47679d140 100644 --- a/railties/lib/rails/plugin.rb +++ b/railties/lib/rails/plugin.rb @@ -23,6 +23,17 @@ module Rails attr_reader :name, :path + def load_tasks + super + extra_tasks = Dir["#{root}/{tasks,rails/tasks}/**/*.rake"] + + unless extra_tasks.empty? + ActiveSupport::Deprecation.warn "Having rake tasks in PLUGIN_PATH/tasks or " << + "PLUGIN_PATH/rails/tasks is deprecated. Use to PLUGIN_PATH/lib/tasks instead" + extra_tasks.sort.each { |ext| load(ext) } + end + end + def initialize(root) @name = File.basename(root).to_sym config.root = root diff --git a/railties/test/plugins/vendored_test.rb b/railties/test/plugins/vendored_test.rb index b3b85891b2..eae73ee5d8 100644 --- a/railties/test/plugins/vendored_test.rb +++ b/railties/test/plugins/vendored_test.rb @@ -145,6 +145,40 @@ module PluginsTest response = Rails.application.call(Rack::MockRequest.env_for("/sprokkit")) assert_equal "I am a Sprokkit", response[2].join end + + test "tasks are loaded by default" do + $executed = false + @plugin.write "lib/tasks/foo.rake", <<-RUBY + task :foo do + $executed = true + end + RUBY + + boot_rails + require 'rake' + require 'rake/rdoctask' + require 'rake/testtask' + Rails.application.load_tasks + Rake::Task[:foo].invoke + assert $executed + end + + test "deprecated tasks are also loaded" do + $executed = false + @plugin.write "tasks/foo.rake", <<-RUBY + task :foo do + $executed = true + end + RUBY + + boot_rails + require 'rake' + require 'rake/rdoctask' + require 'rake/testtask' + Rails.application.load_tasks + Rake::Task[:foo].invoke + assert $executed + end end class VendoredOrderingTest < Test::Unit::TestCase