aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib')
-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