Module: Rails::Generators
Constant Summary
-
DEFAULT_ALIASES =
# File 'railties/lib/rails/generators.rb', line 32{ 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 =
# File 'railties/lib/rails/generators.rb', line 52{ rails: { api: false, assets: true, force_plural: false, helper: true, integration_tool: nil, javascripts: true, javascript_engine: :js, 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 =
We need to store the
RAILS_DEV_PATH
in a constant, otherwise the path can change in Ruby 1.8.7 when weFileUtils.cd
.File. ("../../../../../..", __dir__)
-
RESERVED_NAMES =
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 253%w[application destroy plugin runner test]
Class Attribute Summary
- .namespace (also: #namespace) rw
Class Method Summary
-
.api_only!
Configure generators for
API
only applications. -
.fallbacks
Hold configured generators fallbacks.
-
.help(command = "generate")
Show help message with available generators.
-
.hidden_namespaces
Returns an array of generator namespaces that are hidden.
-
.hide_namespace(*namespaces)
Alias for .hide_namespaces.
- .hide_namespaces(*namespaces) (also: .hide_namespace)
-
.invoke(namespace, args = ARGV, config = {})
Receives a namespace, arguments and the behavior to invoke the generator.
-
.no_color!
Remove the color from output.
- .print_generators
- .public_namespaces
- .sorted_groups
- .command_type private
- .file_lookup_paths private
- .lookup_paths private
- .print_list(base, namespaces) private
Instance Attribute Summary
- #namespace rw
Class Attribute Details
.namespace (rw) Also known as: #namespace
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 30
mattr_accessor :namespace
Class Method Details
.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.
# File 'railties/lib/rails/generators.rb', line 118
def api_only! hide_namespaces "assets", "helper", "css", "js" [:rails].merge!( api: true, assets: false, helper: false, template_engine: nil ) if ARGV.first == "mailer" [:rails].merge!(template_engine: :erb) end end
.command_type (private)
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 311
def command_type # :doc: @command_type ||= "generator" end
.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
# File 'railties/lib/rails/generators.rb', line 110
def fallbacks @fallbacks ||= {} end
.file_lookup_paths (private)
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 319
def file_lookup_paths # :doc: @file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ] end
.help(command = "generate")
Show help message with available generators.
# File 'railties/lib/rails/generators.rb', line 181
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
.hide_namespace(*namespaces)
Alias for .hide_namespaces.
# File 'railties/lib/rails/generators.rb', line 178
alias hide_namespace hide_namespaces
.hide_namespaces(*namespaces) Also known as: .hide_namespace
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 175
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.
# File 'railties/lib/rails/generators.rb', line 272
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) else = sorted_groups.flat_map(&:last) suggestions = .sort_by { |suggested| levenshtein_distance(namespace.to_s, suggested) }.first(3) suggestions.map! { |s| "'#{s}'" } msg = "Could not find generator '#{namespace}'. ".dup msg << "Maybe you meant #{ suggestions[0...-1].join(', ')} or #{suggestions[-1]}\n" msg << "Run `rails generate --help` for more options." puts msg end end
.lookup_paths (private)
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 315
def lookup_paths # :doc: @lookup_paths ||= %w( rails/generators generators ) end
.no_color!
Remove the color from output.
# File 'railties/lib/rails/generators.rb', line 134
def no_color! Thor::Base.shell = Thor::Shell::Basic end
.print_generators
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 202
def print_generators sorted_groups.each { |b, n| print_list(b, n) } end
.print_list(base, namespaces) (private)
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 290
def print_list(base, namespaces) # :doc: namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) } super end
.public_namespaces
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 197
def public_namespaces lookup! subclasses.map(&:namespace) end
.sorted_groups
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 206
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.sub(/^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") hidden_namespaces.each { |n| groups.delete(n.to_s) } [[ "rails", rails ]] + groups.sort.to_a end
Instance Attribute Details
#namespace (rw)
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 30
mattr_accessor :namespace