Added Rails::Generators.find_by_namespace.

This commit is contained in:
José Valim
2009-06-26 19:14:55 +02:00
parent 3a0619f1bb
commit 5ef1d9706b
2 changed files with 38 additions and 8 deletions

View File

@@ -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}."

View File

@@ -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