module Rails::Generators
Constants
- DEFAULT_ALIASES
- DEFAULT_OPTIONS
Public Class Methods
Source
# File lib/rails/generators.rb, line 116 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.
Source
# File lib/rails/generators.rb, line 108 def fallbacks @fallbacks ||= {} 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
# File lib/rails/generators.rb, line 172 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
Show help message with available generators.
Source
# File lib/rails/generators.rb, line 166 def hide_namespaces(*namespaces) hidden_namespaces.concat(namespaces) end
Source
# File lib/rails/generators.rb, line 263 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
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
# File lib/rails/generators.rb, line 194 def print_generators sorted_groups.each { |b, n| print_list(b, n) } end
Source
# File lib/rails/generators.rb, line 189 def public_namespaces lookup! subclasses.map(&:namespace) end
Source
# File lib/rails/generators.rb, line 198 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
Private Class Methods
Source
# File lib/rails/generators.rb, line 308 def command_type # :doc: @command_type ||= "generator" end
Source
# File lib/rails/generators.rb, line 316 def file_lookup_paths # :doc: @file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ] end
Source
# File lib/rails/generators.rb, line 312 def lookup_paths # :doc: @lookup_paths ||= %w( rails/generators generators ) end
Source
# File lib/rails/generators.rb, line 287 def print_list(base, namespaces) # :doc: namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) } super end