- MODULE Rails::Generators::Actions
- MODULE Rails::Generators::Db
- MODULE Rails::Generators::Migration
- MODULE Rails::Generators::Testing
- CLASS Rails::Generators::ActiveModel
- CLASS Rails::Generators::AppBase
- CLASS Rails::Generators::AppGenerator
- CLASS Rails::Generators::Base
- CLASS Rails::Generators::BenchmarkGenerator
- CLASS Rails::Generators::NamedBase
- CLASS Rails::Generators::TestCase
- A
- C
- F
- H
- I
- L
- P
- 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", scaffold_stylesheet: "-ss", 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, stylesheets: true, stylesheet_engine: :css, scaffold_stylesheet: true, system_tests: nil, test_framework: nil, template_engine: :erb } } |
RAILS_DEV_PATH | = | File.expand_path("../../../../../..", __dir__) |
We need to store the |
Class Public methods
api_only!() Link
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.
fallbacks() Link
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
help(command = "generate") Link
Show help message with available generators.
# File railties/lib/rails/generators.rb, line 180 def 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() Link
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”.
Source: on GitHub
|invoke(namespace, args = ARGV, config = {}) Link
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 271 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) suggestion = Rails::Command::Spellchecker.suggest(namespace.to_s, from: options) suggestion_msg = "Maybe you meant #{suggestion.inspect}?" if suggestion puts <<~MSG Could not find generator '#{namespace}'. #{suggestion_msg} Run `bin/rails generate --help` for more options. MSG end end
print_generators() Link
public_namespaces() Link
sorted_groups() Link
# File railties/lib/rails/generators.rb, line 205 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_secrets") 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