module Rails::Generators
Constants
- DEFAULT_ALIASES
- DEFAULT_OPTIONS
- RAILS_DEV_PATH
-
We need to store the RAILS_DEV_PATH in a constant, otherwise the path can change in Ruby 1.8.7 when we FileUtils.cd.
- RESERVED_NAMES
Public Class Methods
Hold configured generators fallbacks. If a plugin developer wants a generator group to fallback to another group in case of missing generators, they can add a fallback.
For example, shoulda is considered a test_framework and is an extension of test_unit. However, most part of shoulda generators are similar to test_unit ones.
Shoulda then can tell generators to search for test_unit generators when some of them are not available by adding a fallback:
Rails::Generators.fallbacks[:shoulda] = :test_unit
# File railties/lib/rails/generators.rb, line 98
def self.fallbacks
@fallbacks ||= {}
end Show help message with available generators.
# File railties/lib/rails/generators.rb, line 201
def self.help(command = 'generate')
lookup!
namespaces = subclasses.map{ |k| k.namespace }
namespaces.sort!
groups = Hash.new { |h,k| h[k] = [] }
namespaces.each do |namespace|
base = namespace.split(':').first
groups[base] << namespace
end
puts "Usage: rails #{command} GENERATOR [args] [options]"
puts
puts "General options:"
puts " -h, [--help] # Print generator's options and usage"
puts " -p, [--pretend] # Run but do not make any changes"
puts " -f, [--force] # Overwrite files that already exist"
puts " -s, [--skip] # Skip files that already exist"
puts " -q, [--quiet] # Suppress status output"
puts
puts "Please choose a generator below."
puts
# Print Rails defaults first.
rails = groups.delete("rails")
rails.map! { |n| n.sub(/^rails:/, '') }
rails.delete("app")
rails.delete("plugin")
print_list("rails", rails)
hidden_namespaces.each { |n| groups.delete(n.to_s) }
groups.sort.each { |b, n| print_list(b, n) }
end # File railties/lib/rails/generators.rb, line 194 def hide_namespaces(*namespaces) hidden_namespaces.concat(namespaces) end
Receives a namespace, arguments and the behavior to invoke the generator. It's used as the default entry point for generate, destroy and update commands.
# File railties/lib/rails/generators.rb, line 153
def self.invoke(namespace, args=ARGV, config={})
names = namespace.to_s.split(':')
if klass = find_by_namespace(names.pop, names.any? && names.join(':'))
args << "--help" if args.empty? && klass.arguments.any? { |a| a.required? }
klass.start(args, config)
else
puts "Could not find generator #{namespace}."
end
end Remove the color from output.
# File railties/lib/rails/generators.rb, line 103 def self.no_color! Thor::Base.shell = Thor::Shell::Basic end
Track all generators subclasses.
# File railties/lib/rails/generators.rb, line 108 def self.subclasses @subclasses ||= [] end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.