From cbce027669ded4e951af3124cae23d6707357aea Mon Sep 17 00:00:00 2001 From: Sam Pohlenz Date: Sun, 27 Dec 2009 11:16:34 +1030 Subject: [PATCH 1/2] Application object should instantiate non-vendored plugins Signed-off-by: Carl Lerche --- railties/lib/rails/application.rb | 2 +- railties/lib/rails/plugin.rb | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index 2d0892282e..91c866d0c9 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -98,7 +98,7 @@ module Rails def plugins @plugins ||= begin plugin_names = config.plugins || [:all] - Plugin.plugins.select { |p| plugin_names.include?(:all) || plugin_names.include?(p.plugin_name) } + + Plugin.plugins.select { |p| plugin_names.include?(:all) || plugin_names.include?(p.plugin_name) }.map { |p| p.new } + Plugin::Vendored.all(config.plugins || [:all], config.paths.vendor.plugins) end end diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb index be6cdec3fa..b5e6953fef 100644 --- a/railties/lib/rails/plugin.rb +++ b/railties/lib/rails/plugin.rb @@ -27,12 +27,17 @@ module Rails def self.rake_tasks(&blk) @rake_tasks ||= [] - @rake_tasks << blk + @rake_tasks << blk if blk + @rake_tasks end - def self.load_tasks - return unless @rake_tasks - @rake_tasks.each { |blk| blk.call } + def rake_tasks + self.class.rake_tasks + end + + def load_tasks + return unless rake_tasks + rake_tasks.each { |blk| blk.call } end # Creates an initializer which includes all given modules to the given class. From 468bdb3ed8ee20fe4215e62f0f27513c70e2398c Mon Sep 17 00:00:00 2001 From: Sam Pohlenz Date: Mon, 28 Dec 2009 08:48:07 +1030 Subject: [PATCH 2/2] Make plugins responsible for loading their own rake tasks Signed-off-by: Carl Lerche --- railties/lib/rails/application.rb | 8 +------- railties/lib/rails/plugin.rb | 4 ++++ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index 91c866d0c9..d714c5ac41 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -72,13 +72,7 @@ module Rails def load_tasks require "rails/tasks" - # Load all extension rake tasks - # TODO: Make all plugin objects respond to :load_tasks - plugins.each do |plugin| - plugin.load_tasks if plugin.respond_to? :load_tasks - end - # Load all plugin tasks - Dir["#{root}/vendor/plugins/*/**/tasks/**/*.rake"].sort.each { |ext| load ext } + plugins.each { |p| p.load_tasks } # Load all application tasks # TODO: extract out the path to the rake tasks Dir["#{root}/lib/tasks/**/*.rake"].sort.each { |ext| load ext } diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb index b5e6953fef..c64042cf7d 100644 --- a/railties/lib/rails/plugin.rb +++ b/railties/lib/rails/plugin.rb @@ -85,6 +85,10 @@ module Rails Dir["#{path}/{lib}", "#{path}/app/{models,controllers,helpers}"] end + def load_tasks + Dir["#{path}/**/tasks/**/*.rake"].sort.each { |ext| load ext } + end + initializer :add_to_load_path, :after => :set_autoload_paths do |app| load_paths.each do |path| $LOAD_PATH << path