module Rails::Generators
Constants
- DEFAULT_ALIASES
- DEFAULT_OPTIONS
- RAILS_DEV_PATH
-
We need to store the
RAILS_DEV_PATHin a constant, otherwise the path can change in Ruby 1.8.7 when we FileUtils.cd.
Public Class Methods
# File railties/lib/rails/generators.rb, line 121
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 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 113
def fallbacks
@fallbacks ||= {}
end 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 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 Show help message with available generators.
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”.
# File railties/lib/rails/generators.rb, line 174 def hide_namespaces(*namespaces) hidden_namespaces.concat(namespaces) end
# 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 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 201
def print_generators
sorted_groups.each { |b, n| print_list(b, n) }
end # File railties/lib/rails/generators.rb, line 196 def public_namespaces lookup! subclasses.map(&:namespace) end
# 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 Private Class Methods
# File railties/lib/rails/generators.rb, line 316 def command_type # :doc: @command_type ||= "generator" end
# File railties/lib/rails/generators.rb, line 324
def file_lookup_paths # :doc:
@file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ]
end # File railties/lib/rails/generators.rb, line 320 def lookup_paths # :doc: @lookup_paths ||= %w( rails/generators generators ) end
# File railties/lib/rails/generators.rb, line 295
def print_list(base, namespaces) # :doc:
namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) }
super
end
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.