123456789_123456789_123456789_123456789_123456789_

Module: Rails::Generators

Relationships & Source Files
Namespace Children
Modules:
Classes:
Defined in: activejob/lib/rails/generators/job/job_generator.rb,
actionmailer/lib/rails/generators/mailer/mailer_generator.rb,
railties/lib/rails/generators.rb,
railties/lib/rails/commands/application.rb,
railties/lib/rails/generators/actions.rb,
railties/lib/rails/generators/active_model.rb,
railties/lib/rails/generators/app_base.rb,
railties/lib/rails/generators/base.rb,
railties/lib/rails/generators/generated_attribute.rb,
railties/lib/rails/generators/migration.rb,
railties/lib/rails/generators/model_helpers.rb,
railties/lib/rails/generators/named_base.rb,
railties/lib/rails/generators/resource_helpers.rb,
railties/lib/rails/generators/test_case.rb,
railties/lib/rails/generators/actions/create_migration.rb,
railties/lib/rails/generators/rails/app/app_generator.rb,
railties/lib/rails/generators/rails/assets/assets_generator.rb,
railties/lib/rails/generators/rails/controller/controller_generator.rb,
railties/lib/rails/generators/rails/generator/generator_generator.rb,
railties/lib/rails/generators/rails/helper/helper_generator.rb,
railties/lib/rails/generators/rails/integration_test/integration_test_generator.rb,
railties/lib/rails/generators/rails/migration/migration_generator.rb,
railties/lib/rails/generators/rails/model/model_generator.rb,
railties/lib/rails/generators/rails/plugin/plugin_generator.rb,
railties/lib/rails/generators/rails/resource/resource_generator.rb,
railties/lib/rails/generators/rails/resource_route/resource_route_generator.rb,
railties/lib/rails/generators/rails/scaffold/scaffold_generator.rb,
railties/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb,
railties/lib/rails/generators/rails/task/task_generator.rb,
railties/lib/rails/generators/testing/assertions.rb,
railties/lib/rails/generators/testing/behaviour.rb,
railties/lib/rails/generators/testing/setup_and_teardown.rb

Constant Summary

Class Attribute Summary

Class Method Summary

Instance Attribute Summary

Class Attribute Details

.namespace (rw) Also known as: #namespace

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 24

mattr_accessor :namespace

Class Method Details

.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
[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 98

def self.fallbacks
  @fallbacks ||= {}
end

.help(command = 'generate')

Show help message with available generators.

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 211

def self.help(command = 'generate')
  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_generators
end

.hidden_namespaces

Returns an array of generator namespaces that are hidden. Generator namespaces may be hidden for a variety of reasons. Some are aliased such as “rails:migration” and can be invoked with the shorter “migration”, others are private to other generators such as “css:scaffold”.

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 173

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.

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 207

alias hide_namespace hide_namespaces

.hide_namespaces(*namespaces) Also known as: .hide_namespace

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 204

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.

[ GitHub ]

  
# 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
    options     = sorted_groups.map(&:last).flatten
    suggestions = options.sort_by {|suggested| levenshtein_distance(namespace.to_s, suggested) }.first(3)
    msg =  "Could not find generator '#{namespace}'. "
    msg << "Maybe you meant #{ suggestions.map {|s| "'#{s}'"}.to_sentence(last_word_connector: " or ") }\n"
    msg << "Run `rails generate --help` for more options."
    puts msg
  end
end

.no_color!

Remove the color from output.

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 103

def self.no_color!
  Thor::Base.shell = Thor::Shell::Basic
end

.public_namespaces

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 227

def self.public_namespaces
  lookup!
  subclasses.map { |k| k.namespace }
end

.sorted_groups

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 236

def self.sorted_groups
  namespaces = public_namespaces
  namespaces.sort!
  groups = Hash.new { |h,k| h[k] = [] }
  namespaces.each do |namespace|
    base = namespace.split(':').first
    groups[base] << namespace
  end
  rails = groups.delete("rails")
  rails.map! { |n| n.sub(/^rails:/, '') }
  rails.delete("app")
  rails.delete("plugin")

  hidden_namespaces.each { |n| groups.delete(n.to_s) }

  [["rails", rails]] + groups.sort.to_a
end

.subclasses

Track all generators subclasses.

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 108

def self.subclasses
  @subclasses ||= []
end

Instance Attribute Details

#namespace (rw)

[ GitHub ]

  
# File 'railties/lib/rails/generators.rb', line 24

mattr_accessor :namespace