Class/Module Index [+]

Quicksearch

Rails::Generator::Lookup::ClassMethods

Public Instance Methods

append_sources(*args) click to toggle source

Add a source to the end of the list.

# File lib/rails_generator/lookup.rb, line 70
def append_sources(*args)
  sources.concat(args.flatten)
  invalidate_cache!
end
instance(generator_name, args = [], runtime_options = {}) click to toggle source

Convenience method to lookup and instantiate a generator.

# File lib/rails_generator/lookup.rb, line 139
def instance(generator_name, args = [], runtime_options = {})
  lookup(generator_name).klass.new(args, full_options(runtime_options))
end
lookup(generator_name) click to toggle source

Lookup knows how to find generators' Specs from a list of Sources. Searches the sources, in order, for the first matching name.

# File lib/rails_generator/lookup.rb, line 124
def lookup(generator_name)
  @found ||= {}
  generator_name = generator_name.to_s.downcase
  @found[generator_name] ||= cache.find { |spec| spec.name == generator_name }
  unless @found[generator_name] 
    chars = generator_name.scan(/./).map{|c|"#{c}.*?"}
    rx = /^#{chars}$/
    gns = cache.select{|spec| spec.name =~ rx }
    @found[generator_name] ||= gns.first if gns.length == 1
    raise GeneratorError, "Pattern '#{generator_name}' matches more than one generator: #{gns.map{|sp|sp.name}.join(', ')}" if gns.length > 1
  end
  @found[generator_name] or raise GeneratorError, "Couldn't find '#{generator_name}' generator"
end
prepend_sources(*args) click to toggle source

Add a source to the beginning of the list.

# File lib/rails_generator/lookup.rb, line 76
def prepend_sources(*args)
  write_inheritable_array(:sources, args.flatten + sources)
  invalidate_cache!
end
reset_sources() click to toggle source

Reset the source list.

# File lib/rails_generator/lookup.rb, line 82
def reset_sources
  write_inheritable_attribute(:sources, [])
  invalidate_cache!
end
sources() click to toggle source

The list of sources where we look, in order, for generators.

# File lib/rails_generator/lookup.rb, line 65
def sources
  read_inheritable_attribute(:sources) or use_component_sources!
end
use_application_sources!() click to toggle source

Use application generators (app, ?).

# File lib/rails_generator/lookup.rb, line 88
def use_application_sources!
  reset_sources
  sources << PathSource.new(:builtin, "#{File.dirname(__FILE__)}/generators/applications")
end
use_component_sources!() click to toggle source

Use component generators (model, controller, etc).

  1. Rails application. If RAILS_ROOT is defined we know we're generating in the context of a Rails application, so search RAILS_ROOT/generators.

  2. Look in plugins, either for generators/ or rails_generators/ directories within each plugin

  3. User home directory. Search ~/.rails/generators.

  4. RubyGems. Search for gems named *_generator, and look for generators within any RubyGem's /rails_generators/<generator_name>_generator.rb file.

  5. Builtins. Model, controller, mailer, scaffold, and so on.

# File lib/rails_generator/lookup.rb, line 104
def use_component_sources!
  reset_sources
  if defined? ::RAILS_ROOT
    sources << PathSource.new(:lib, "#{::RAILS_ROOT}/lib/generators")
    sources << PathSource.new(:vendor, "#{::RAILS_ROOT}/vendor/generators")
    Rails.configuration.plugin_paths.each do |path|
      relative_path = Pathname.new(File.expand_path(path)).relative_path_from(Pathname.new(::RAILS_ROOT))
      sources << PathSource.new(:"plugins (#{relative_path})", "#{path}/*/**/{,rails_}generators")
    end
  end
  sources << PathSource.new(:user, "#{Dir.user_home}/.rails/generators")
  if Object.const_defined?(:Gem)
    sources << GemGeneratorSource.new
    sources << GemPathSource.new
  end
  sources << PathSource.new(:builtin, "#{File.dirname(__FILE__)}/generators/components")
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.