Rails::Generators (original) (raw)

Namespace

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

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: show | on GitHub

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

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

Show help message with available generators.

Source: show | on GitHub

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

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”.

Source: show | on GitHub

def hide_namespaces(*namespaces) hidden_namespaces.concat(namespaces) 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: show | on GitHub

  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

Source: show | on GitHub

def print_generators sorted_groups.each { |b, n| print_list(b, n) } end

Source: show | on GitHub

def public_namespaces lookup! subclasses.map(&:namespace) end

Source: show | on GitHub

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

Source: show | on GitHub

def command_type @command_type ||= "generator" end

Source: show | on GitHub

def file_lookup_paths @file_lookup_paths ||= [ "{#{lookup_paths.join(',')}}", "**", "*_generator.rb" ] end

Source: show | on GitHub

def lookup_paths @lookup_paths ||= %w( rails/generators generators ) end

Source: show | on GitHub

def print_list(base, namespaces) namespaces = namespaces.reject { |n| hidden_namespaces.include?(n) } super end