module Rails::Generators
Inherits From
-
module
Rails::
Command:: Behavior
Constants
{
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",
}
}
{
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
}
}
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.
File.expand_path("../../../../../..", __dir__)
Public class methods
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 GitHub
# File railties/lib/rails/generators.rb, line 113
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
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 GitHub
# File railties/lib/rails/generators.rb, line 105
def fallbacks
@fallbacks ||= {}
end
Show help message with available generators.
Source code GitHub
# File railties/lib/rails/generators.rb, line 166
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
Alias for:
hide_namespaces
.
Also aliased as:
hide_namespace
.
Source code GitHub
# File railties/lib/rails/generators.rb, line 160
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.
Source code GitHub
# File railties/lib/rails/generators.rb, line 258
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
end
end
Source code GitHub
# File railties/lib/rails/generators.rb, line 188
def print_generators
sorted_groups.each { |b, n| print_list(b, n) }
end
Source code GitHub
# File railties/lib/rails/generators.rb, line 183
def public_namespaces
lookup!
subclasses.map(&:namespace)
end
Source code GitHub
# File railties/lib/rails/generators.rb, line 192
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
Private class methods
Source code GitHub
# File railties/lib/rails/generators.rb, line 302
def command_type # :doc:
@command_type ||= "generator"
end
Source code GitHub
# File railties/lib/rails/generators.rb, line 310
def file_lookup_paths # :doc:
@file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ]
end
Source code GitHub
# File railties/lib/rails/generators.rb, line 306
def lookup_paths # :doc:
@lookup_paths ||= %w( rails/generators generators )
end
Source code GitHub
# File railties/lib/rails/generators.rb, line 281
def print_list(base, namespaces) # :doc:
namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) }
super
end
Namespace
Rails::
Generators:: Actions Rails::
Generators:: ActiveModel Rails::
Generators:: AppBase Rails::
Generators:: AppGenerator Rails::
Generators:: Base Rails::
Generators:: BenchmarkGenerator Rails::
Generators:: Db Rails::
Generators:: Devcontainer Rails::
Generators:: Migration Rails::
Generators:: TestCase Rails::
Generators:: Testing
Definition files
railties/
lib/ rails/ commands/ application/ application_command.rb railties/
lib/ rails/ generators.rb railties/
lib/ rails/ generators/ actions.rb railties/
lib/ rails/ generators/ active_model.rb railties/
lib/ rails/ generators/ app_base.rb
23 More Less
railties/
lib/ rails/ generators/ app_name.rb railties/
lib/ rails/ generators/ base.rb railties/
lib/ rails/ generators/ database.rb railties/
lib/ rails/ generators/ devcontainer.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/ rails/ app/ app_generator.rb railties/
lib/ rails/ generators/ rails/ application_record/ application_record_generator.rb railties/
lib/ rails/ generators/ rails/ benchmark/ benchmark_generator.rb railties/
lib/ rails/ generators/ rails/ controller/ controller_generator.rb railties/
lib/ rails/ generators/ rails/ credentials/ credentials_generator.rb railties/
lib/ rails/ generators/ rails/ db/ system/ change/ change_generator.rb railties/
lib/ rails/ generators/ rails/ encryption_key_file/ encryption_key_file_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/ scaffold/ scaffold_generator.rb railties/
lib/ rails/ generators/ rails/ scaffold_controller/ scaffold_controller_generator.rb railties/
lib/ rails/ generators/ test_case.rb railties/
lib/ rails/ generators/ testing/ assertions.rb railties/
lib/ rails/ generators/ testing/ behavior.rb