class RubiGen::GemPathSource

GemPathSource looks for generators within any RubyGem's /{filter_}generators /<generator_name>_generator.rb file.

Attributes

filters[RW]

Public Class Methods

new(*filters) click to toggle source
Calls superclass method RubiGen::AbstractGemSource.new
# File lib/rubigen/lookup.rb, line 265
def initialize(*filters)
  super()
  @filters = filters
end

Public Instance Methods

==(source) click to toggle source
# File lib/rubigen/lookup.rb, line 277
def ==(source)
  self.class == source.class && filters == source.filters
end
each() { |spec(basename.sub(/rb$/, ''), dirname, label)| ... } click to toggle source

Yield each generator within rails_generator subdirectories.

# File lib/rubigen/lookup.rb, line 271
def each
  generator_full_paths.each do |generator|
    yield Spec.new(File.basename(generator).sub(/_generator.rb$/, ''), File.dirname(generator), label)
  end
end

Private Instance Methods

filter_str() click to toggle source
# File lib/rubigen/lookup.rb, line 297
def filter_str
  @filters = filters.first.is_a?(Array) ? filters.first : filters
  return "" if filters.blank?
  filter_str = filters.map {|filter| "#{filter}_"}.join(",")
  filter_str += ","
  "{#{filter_str}}"
end
generator_full_paths() click to toggle source
# File lib/rubigen/lookup.rb, line 282
def generator_full_paths
  @generator_full_paths ||=
    Gem::source_index.inject({}) do |latest, name_gem|
      name, gem = name_gem
      hem = latest[gem.name]
      latest[gem.name] = gem if hem.nil? or gem.version > hem.version
      latest
    end.values.inject([]) do |mem, gem|
      Dir[gem.full_gem_path + "/#{filter_str}generators/**/*_generator.rb"].each do |generator|
        mem << generator
      end
      mem
    end.reverse
end