Module: Rails::Generators
Constant Summary
-
DEFAULT_ALIASES =
# File 'railties/lib/rails/generators.rb', line 26{ rails: { actions: '-a', orm: '-o', javascripts: '-j', javascript_engine: '-je', resource_controller: '-c', scaffold_controller: '-c', stylesheets: '-y', stylesheet_engine: '-se', template_engine: '-e', test_framework: '-t' }, test_unit: { fixture_replacement: '-r', } }
-
DEFAULT_OPTIONS =
# File 'railties/lib/rails/generators.rb', line 45{ rails: { 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, test_framework: false, 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. ("../../../../../..", File.dirname(__FILE__))
-
RESERVED_NAMES =
# File 'railties/lib/rails/generators/rails/app/app_generator.rb', line 162%w[application destroy plugin runner test]
Class Attribute Summary
- .namespace (also: #namespace) rw
Class Method Summary
-
.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
-
.subclasses
Track all generators subclasses.
Instance Attribute Summary
- #namespace rw
Class Attribute Details
.namespace (rw) Also known as: #namespace
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 24
mattr_accessor :namespace
Class Method Details
.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 98
def self.fallbacks @fallbacks ||= {} end
.help(command = 'generate')
Show help message with available generators.
# File 'railties/lib/rails/generators.rb', line 211
def self.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 207
alias hide_namespace hide_namespaces
.hide_namespaces(*namespaces) Also known as: .hide_namespace
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 204
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 153
def self.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? { |a| a.required? } klass.start(args, config) else = sorted_groups.map(&:last).flatten suggestions = .sort_by {|suggested| levenshtein_distance(namespace.to_s, suggested) }.first(3) msg = "Could not find generator '#{namespace}'. " msg << "Maybe you meant #{ suggestions.map {|s| "'#{s}'"}.to_sentence(last_word_connector: " or ") }\n" msg << "Run `rails generate --help` for more options." puts msg end end
.no_color!
Remove the color from output.
# File 'railties/lib/rails/generators.rb', line 103
def self.no_color! Thor::Base.shell = Thor::Shell::Basic end
.print_generators
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 232
def self.print_generators sorted_groups.each { |b, n| print_list(b, n) } end
.public_namespaces
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 227
def self.public_namespaces lookup! subclasses.map { |k| k.namespace } end
.sorted_groups
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 236
def self.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") hidden_namespaces.each { |n| groups.delete(n.to_s) } [["rails", rails]] + groups.sort.to_a end
.subclasses
Track all generators subclasses.
# File 'railties/lib/rails/generators.rb', line 108
def self.subclasses @subclasses ||= [] end
Instance Attribute Details
#namespace (rw)
[ GitHub ]# File 'railties/lib/rails/generators.rb', line 24
mattr_accessor :namespace