aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/lib/rails_generator/lookup.rb10
-rw-r--r--railties/test/rails_generator_test.rb14
2 files changed, 16 insertions, 8 deletions
diff --git a/railties/lib/rails_generator/lookup.rb b/railties/lib/rails_generator/lookup.rb
index ca46afa418..598cb79e73 100644
--- a/railties/lib/rails_generator/lookup.rb
+++ b/railties/lib/rails_generator/lookup.rb
@@ -92,9 +92,13 @@ module Rails
# 1. Rails application. If RAILS_ROOT is defined we know we're
# generating in the context of a Rails application, so search
# RAILS_ROOT/generators.
- # 2. User home directory. Search ~/.rails/generators.
- # 3. RubyGems. Search for gems named *_generator.
- # 4. Builtins. Model, controller, mailer, scaffold.
+ # 2. Look in plugins, either for generators/ or rails_generators/
+ # directories within each plugin
+ # 3. User home directory. Search ~/.rails/generators.
+ # 4. RubyGems. Search for gems named *_generator, and look for
+ # generators within any RubyGem's
+ # /rails_generators/<generator_name>_generator.rb file.
+ # 5. Builtins. Model, controller, mailer, scaffold, and so on.
def use_component_sources!
reset_sources
if defined? ::RAILS_ROOT
diff --git a/railties/test/rails_generator_test.rb b/railties/test/rails_generator_test.rb
index 9d8f91abaf..eac3a3d176 100644
--- a/railties/test/rails_generator_test.rb
+++ b/railties/test/rails_generator_test.rb
@@ -37,7 +37,7 @@ require 'rails_generator'
class RailsGeneratorTest < Test::Unit::TestCase
- BUILTINS = %w(controller mailer model scaffold)
+ BUILTINS = %w(controller integration_test mailer migration model observer plugin resource scaffold session_migration web_service)
CAPITALIZED_BUILTINS = BUILTINS.map { |b| b.capitalize }
def setup
@@ -45,8 +45,12 @@ class RailsGeneratorTest < Test::Unit::TestCase
end
def test_sources
- expected = [:lib, :vendor, :plugins, :user, :RubyGems, :builtin]
- expected.delete(:gem) unless Object.const_defined?(:Gem)
+ expected = [:lib, :vendor,
+ :plugins, :plugins, # <plugin>/generators and <plugin>/rails_generators
+ :user,
+ :RubyGems, :RubyGems, # gems named <x>_generator, gems containing /rails_generator/ folder
+ :builtin]
+ expected.delete(:RubyGems) unless Object.const_defined?(:Gem)
assert_equal expected, Rails::Generator::Base.sources.map { |s| s.label }
end
@@ -84,8 +88,8 @@ class RailsGeneratorTest < Test::Unit::TestCase
end
def test_generator_usage
- BUILTINS.each do |name|
- assert_raise(Rails::Generator::UsageError) {
+ (BUILTINS - ["session_migration"]).each do |name|
+ assert_raise(Rails::Generator::UsageError, "Generator '#{name}' should raise an error without arguments") {
Rails::Generator::Base.instance(name)
}
end