aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/plugin.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/rails/plugin.rb')
-rw-r--r--railties/lib/rails/plugin.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
index 0699affea7..c64042cf7d 100644
--- a/railties/lib/rails/plugin.rb
+++ b/railties/lib/rails/plugin.rb
@@ -25,6 +25,39 @@ module Rails
Configuration.default
end
+ def self.rake_tasks(&blk)
+ @rake_tasks ||= []
+ @rake_tasks << blk if blk
+ @rake_tasks
+ end
+
+ 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.
+ #
+ # module Rails
+ # class ActionController < Rails::Plugin
+ # plugin_name :action_controller
+ # include_modules_in "ActionController::Base"
+ # end
+ # end
+ #
+ def self.include_modules_in(klass, from=plugin_name)
+ self.initializer :"#{from}.include_modules" do |app|
+ klass = klass.constantize if klass.is_a?(String)
+ app.config.send(from).includes.each do |mod|
+ klass.send(:include, mod.is_a?(String) ? mod.constantize : mod)
+ end
+ end
+ end
+
class Vendored < Plugin
def self.all(list, paths)
plugins = []
@@ -52,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