From 5ef1d9706bfca6362a6eb29820affb98af17e400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 26 Jun 2009 19:14:55 +0200 Subject: Added Rails::Generators.find_by_namespace. --- railties/lib/generators.rb | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'railties/lib/generators.rb') 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 -- cgit v1.2.3