Namespace
Methods
F
H
I
N
S
Constants
DEFAULT_ALIASES = { rails: { actions: '-a', orm: '-o', javascripts: '-j', javascript_engine: '-je', resource_controller: '-c', scaffold_controller: '-c', stylesheets: '-y', stylesheet_engine: '-se', template_engine: '-e', test_framework: '-t' }, test_unit: { fixture_replacement: '-r', } }
 
DEFAULT_OPTIONS = { rails: { assets: true, force_plural: false, helper: true, integration_tool: nil, javascripts: true, javascript_engine: :js, orm: false, resource_controller: :controller, resource_route: true, scaffold_controller: :scaffold_controller, stylesheets: true, stylesheet_engine: :css, test_framework: false, template_engine: :erb } }
 
RAILS_DEV_PATH = File.expand_path("../../../../../..", File.dirname(__FILE__))
 

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 = %w[application destroy plugin runner test]
 
Class Public methods
fallbacks()

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
help(command = 'generate')

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
hidden_namespaces()
# File railties/lib/rails/generators.rb, line 163
def self.hidden_namespaces
  @hidden_namespaces ||= begin
    orm      = options[:rails][:orm]
    test     = options[:rails][:test_framework]
    template = options[:rails][:template_engine]
    css      = options[:rails][:stylesheet_engine]

    [
      "rails",
      "resource_route",
      "#{orm}:migration",
      "#{orm}:model",
      "#{test}:controller",
      "#{test}:helper",
      "#{test}:integration",
      "#{test}:mailer",
      "#{test}:model",
      "#{test}:scaffold",
      "#{test}:view",
      "#{template}:controller",
      "#{template}:scaffold",
      "#{template}:mailer",
      "#{css}:scaffold",
      "#{css}:assets",
      "css:assets",
      "css:scaffold"
    ]
  end
end
hide_namespace(*namespaces)
Alias for: hide_namespaces
hide_namespaces(*namespaces)
Also aliased as: hide_namespace
# File railties/lib/rails/generators.rb, line 194
def hide_namespaces(*namespaces)
  hidden_namespaces.concat(namespaces)
end
invoke(namespace, args=ARGV, config={})

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
no_color!()

Remove the color from output.

# File railties/lib/rails/generators.rb, line 103
def self.no_color!
  Thor::Base.shell = Thor::Shell::Basic
end
subclasses()

Track all generators subclasses.

# File railties/lib/rails/generators.rb, line 108
def self.subclasses
  @subclasses ||= []
end