aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2008-03-27 18:37:53 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2008-03-27 18:37:53 +0000
commit8301ce4d0b9de4423b74abf842faa6cf9e5aae1b (patch)
treee22d7df34571655992cd160d7cce829f980f820d /railties/lib/rails
parent60809439509e071d9c9a6b6f1b2051fa6902985a (diff)
downloadrails-8301ce4d0b9de4423b74abf842faa6cf9e5aae1b.tar.gz
rails-8301ce4d0b9de4423b74abf842faa6cf9e5aae1b.tar.bz2
rails-8301ce4d0b9de4423b74abf842faa6cf9e5aae1b.zip
Added that gems can now be plugins if they include rails/init.rb (closes #11444) [jbarnette]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9101 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'railties/lib/rails')
-rw-r--r--railties/lib/rails/plugin.rb20
-rw-r--r--railties/lib/rails/plugin/locator.rb21
2 files changed, 40 insertions, 1 deletions
diff --git a/railties/lib/rails/plugin.rb b/railties/lib/rails/plugin.rb
index 03fa309ca3..b45ec7de0e 100644
--- a/railties/lib/rails/plugin.rb
+++ b/railties/lib/rails/plugin.rb
@@ -97,4 +97,24 @@ module Rails
end
end
end
+
+ # This Plugin subclass represents a Gem plugin. It behaves exactly like a
+ # "traditional" Rails plugin, but doesn't expose any additional load paths,
+ # since RubyGems has already taken care of things.
+ class GemPlugin < Plugin
+
+ # Initialize this plugin from a Gem::Specification.
+ def initialize(spec)
+ super(File.join(spec.full_gem_path, "rails"))
+ @name = spec.name
+ end
+
+ def valid?
+ true
+ end
+
+ def load_paths
+ []
+ end
+ end
end \ No newline at end of file
diff --git a/railties/lib/rails/plugin/locator.rb b/railties/lib/rails/plugin/locator.rb
index b27e904b12..0b7923cfb6 100644
--- a/railties/lib/rails/plugin/locator.rb
+++ b/railties/lib/rails/plugin/locator.rb
@@ -72,7 +72,26 @@ module Rails
plugins
end
end
-
+ end
+
+ # The GemLocator scans all the loaded RubyGems, looking for gems with
+ # a <tt>rails/init.rb</tt> file.
+ class GemLocator < Locator
+ def plugins
+ specs = Gem.loaded_specs.values.select do |spec|
+ spec.loaded_from && # prune stubs
+ File.exist?(File.join(spec.full_gem_path, "rails", "init.rb"))
+ end
+
+ require "rubygems/dependency_list"
+
+ deps = Gem::DependencyList.new
+ deps.add(*specs)
+
+ deps.dependency_order.collect do |spec|
+ Rails::GemPlugin.new(spec)
+ end
+ end
end
end
end \ No newline at end of file