aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-06-26 19:14:55 +0200
committerJosé Valim <jose.valim@gmail.com>2009-06-26 19:14:55 +0200
commit5ef1d9706bfca6362a6eb29820affb98af17e400 (patch)
treea9b8a4dc1ecdd38e2ba9d03e897fd2161f8b553b /railties
parent3a0619f1bbd44763a827f9f13bccecb597a855db (diff)
downloadrails-5ef1d9706bfca6362a6eb29820affb98af17e400.tar.gz
rails-5ef1d9706bfca6362a6eb29820affb98af17e400.tar.bz2
rails-5ef1d9706bfca6362a6eb29820affb98af17e400.zip
Added Rails::Generators.find_by_namespace.
Diffstat (limited to 'railties')
-rwxr-xr-xrailties/bin/gen10
-rw-r--r--railties/lib/generators.rb36
2 files changed, 38 insertions, 8 deletions
diff --git a/railties/bin/gen b/railties/bin/gen
index 036b1d8275..a6363edd54 100755
--- a/railties/bin/gen
+++ b/railties/bin/gen
@@ -34,15 +34,9 @@ Rails::Generators.builtin.each do |group, name|
require "generators/#{group}/#{name}/#{name}_generator"
end
-name = ARGV.shift
-middle = name.sub(':', ':generators:') if name.count(':') == 1
-full = "rails:generators:#{name}" if name.count(':') == 0
+name = ARGV.shift
-if full && klass = Thor::Util.find_by_namespace(full)
- klass.start
-elsif middle && klass = Thor::Util.find_by_namespace(middle)
- klass.start
-elsif klass = Thor::Util.find_by_namespace(name)
+if klass = Rails::Generators.find_by_namespace(name, "rails")
klass.start
else
puts "Could not find generator #{name}."
diff --git a/railties/lib/generators.rb b/railties/lib/generators.rb
index 3ed1bd4b17..4cc18e26cf 100644
--- a/railties/lib/generators.rb
+++ b/railties/lib/generators.rb
@@ -22,6 +22,42 @@ module Rails
file.split('/')[-2, 2]
end
end
+
+ # Receives a namespace and tries different combinations to find a generator.
+ #
+ # ==== Examples
+ #
+ # lookup_by_namespace :webrat, :rails, :integration
+ #
+ # Will search for the following generators:
+ #
+ # "rails:generators:webrat", "webrat:generators:integration", "webrat"
+ #
+ # If the namespace has ":" included we consider that a absolute namespace
+ # was given and the lookup above does not happen. Just the name is searched.
+ #
+ # Finally, it deals with one kind of shortcut:
+ #
+ # lookup_by_namespace "test_unit:model"
+ #
+ # It will search for generators at:
+ #
+ # "test_unit:generators:model", "test_unit:model"
+ #
+ def self.find_by_namespace(name, base=nil, context=nil)
+ attempts = [ ]
+ attempts << "#{base}:generators:#{name}" if base && name.count(':') == 0
+ attempts << "#{name}:generators:#{context}" if context && name.count(':') == 0
+ attempts << name.sub(':', ':generators:') if name.count(':') == 1
+ attempts << name
+
+ attempts.each do |namespace|
+ klass, task = Thor::Util.find_by_namespace(namespace)
+ return klass if klass
+ end
+
+ nil
+ end
end
end