diff options
Diffstat (limited to 'railties/lib/generators.rb')
-rw-r--r-- | railties/lib/generators.rb | 36 |
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 |