diff options
Diffstat (limited to 'railties/lib/rails')
-rw-r--r-- | railties/lib/rails/plugin.rb | 20 | ||||
-rw-r--r-- | railties/lib/rails/plugin/locator.rb | 21 |
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 |