aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/generators.rb
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/lib/generators.rb
parent3a0619f1bbd44763a827f9f13bccecb597a855db (diff)
downloadrails-5ef1d9706bfca6362a6eb29820affb98af17e400.tar.gz
rails-5ef1d9706bfca6362a6eb29820affb98af17e400.tar.bz2
rails-5ef1d9706bfca6362a6eb29820affb98af17e400.zip
Added Rails::Generators.find_by_namespace.
Diffstat (limited to 'railties/lib/generators.rb')
-rw-r--r--railties/lib/generators.rb36
1 files changed, 36 insertions, 0 deletions
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