Namespace

Module

Class

Methods

Constants

DEFAULT_ALIASES = { rails: { actions: "-a", orm: "-o", javascripts: ["-j", "--js"], resource_controller: "-c", scaffold_controller: "-c", stylesheets: "-y", template_engine: "-e", test_framework: "-t" }, test_unit: { fixture_replacement: "-r", } }
DEFAULT_OPTIONS = { rails: { api: false, assets: true, force_plural: false, helper: true, integration_tool: nil, orm: false, resource_controller: :controller, resource_route: true, scaffold_controller: :scaffold_controller, system_tests: nil, test_framework: nil, template_engine: :erb } }

Class Public methods

api_only!()

Configure generators for API only applications. It basically hides everything that is usually browser related, such as assets and session migration generators, and completely disable helpers and assets so generators such as scaffold won’t create them.

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 116
def api_only!
  hide_namespaces "assets", "helper", "css", "js"

  options[:rails].merge!(
    api: true,
    assets: false,
    helper: false,
    template_engine: nil
  )

  options[:mailer] ||= {}
  options[:mailer][:template_engine] ||= :erb
end
πŸ”Ž See on GitHub

fallbacks()

Hold configured generators fallbacks. If a plugin developer wants a generator group to fall back 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
πŸ“ Source code
# File railties/lib/rails/generators.rb, line 108
def fallbacks
  @fallbacks ||= {}
end
πŸ”Ž See on GitHub

help(command = "generate")

Show help message with available generators.

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 172
def help(command = "generate")
  puts "Usage:"
  puts "  bin/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
πŸ”Ž See on GitHub

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”.

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 134
def hidden_namespaces
  @hidden_namespaces ||= begin
    orm      = options[:rails][:orm]
    test     = options[:rails][:test_framework]
    template = options[:rails][:template_engine]

    [
      "rails",
      "resource_route",
      "#{orm}:migration",
      "#{orm}:model",
      "#{test}:controller",
      "#{test}:helper",
      "#{test}:integration",
      "#{test}:system",
      "#{test}:mailer",
      "#{test}:model",
      "#{test}:scaffold",
      "#{test}:view",
      "#{test}:job",
      "#{template}:controller",
      "#{template}:scaffold",
      "#{template}:mailer",
      "action_text:install",
      "action_mailbox:install",
      "devcontainer"
    ].tap do |h|
      h << "test_unit" if test.to_s != "test_unit"
    end
  end
end
πŸ”Ž See on GitHub

hide_namespace(*namespaces)

Alias for: hide_namespaces.

hide_namespaces(*namespaces)

Also aliased as: hide_namespace.

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 166
def hide_namespaces(*namespaces)
  hidden_namespaces.concat(namespaces)
end
πŸ”Ž See on GitHub

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.

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 263
def 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?(&:required?)
    klass.start(args, config)
    run_after_generate_callback if config[:behavior] == :invoke
  else
    options = sorted_groups.flat_map(&:last)
    error = Command::CorrectableNameError.new("Could not find generator '#{namespace}'.", namespace, options)

    puts <<~MSG
      #{error.detailed_message}
      Run `bin/rails generate --help` for more options.
    MSG
    exit 1
  end
end
πŸ”Ž See on GitHub

print_generators()

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 194
def print_generators
  sorted_groups.each { |b, n| print_list(b, n) }
end
πŸ”Ž See on GitHub

public_namespaces()

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 189
def public_namespaces
  lookup!
  subclasses.map(&:namespace)
end
πŸ”Ž See on GitHub

sorted_groups()

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 198
def 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.delete_prefix("rails:") }
  rails.delete("app")
  rails.delete("plugin")
  rails.delete("encrypted_file")
  rails.delete("encryption_key_file")
  rails.delete("master_key")
  rails.delete("credentials")
  rails.delete("db:system:change")

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

  [[ "rails", rails ]] + groups.sort.to_a
end
πŸ”Ž See on GitHub

Class Private methods

command_type()

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 308
def command_type # :doc:
  @command_type ||= "generator"
end
πŸ”Ž See on GitHub

file_lookup_paths()

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 316
def file_lookup_paths # :doc:
  @file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ]
end
πŸ”Ž See on GitHub

lookup_paths()

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 312
def lookup_paths # :doc:
  @lookup_paths ||= %w( rails/generators generators )
end
πŸ”Ž See on GitHub

print_list(base, namespaces)

πŸ“ Source code
# File railties/lib/rails/generators.rb, line 287
def print_list(base, namespaces) # :doc:
  namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) }
  super
end
πŸ”Ž See on GitHub

Definition files