Rails::Generators (original) (raw)
Namespace
- 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::Database
- CLASS Rails::Generators::NamedBase
- CLASS Rails::Generators::ScriptGenerator
- CLASS Rails::Generators::TestCase
Methods
A
C
F
H
I
L
P
S
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!()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.
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
fallbacks()Link
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
help(command = "generate")Link
Show help message with available generators.
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
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”.
hide_namespace(*namespaces)Link
hide_namespaces(*namespaces)Link
def hide_namespaces(*namespaces) hidden_namespaces.concat(namespaces) end
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.
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
print_generators()Link
def print_generators sorted_groups.each { |b, n| print_list(b, n) } end
public_namespaces()Link
def public_namespaces lookup! subclasses.map(&:namespace) end
sorted_groups()Link
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
Class Private methods
command_type()Link
def command_type @command_type ||= "generator" end
file_lookup_paths()Link
def file_lookup_paths @file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ] end
lookup_paths()Link
def lookup_paths @lookup_paths ||= %w( rails/generators generators ) end
print_list(base, namespaces)Link
def print_list(base, namespaces) namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) } super end