class RoadForest::Utility::ClassRegistry

Public Class Methods

new(registrar, purpose=nil) click to toggle source
# File lib/roadforest/utility/class-registry.rb, line 43
def initialize(registrar, purpose=nil)
  if purpose.nil?
    if registrar.respond_to?(:registry_purpose)
      @purpose = registrar.registry_purpose
    else
      @purpose = registrar.name
    end
  else
    @purpose = purpose
  end
  @sequence = NameSequence.new
  @classes = {}
end

Public Instance Methods

add(name, klass) click to toggle source
# File lib/roadforest/utility/class-registry.rb, line 99
def add(name, klass)
  @sequence.exists(name.to_sym)
  @classes[name.to_sym] = klass
  @classes[name.to_s] = klass
end
get(name) click to toggle source
# File lib/roadforest/utility/class-registry.rb, line 111
def get(name)
  @classes.fetch(name)
rescue KeyError
  raise UndefinedClass, "No #@purpose class registered as name: #{name.inspect} (there are: #{names.inspect})"
end
map_classes() { |get(name)| ... } click to toggle source

@yield each class in name order

# File lib/roadforest/utility/class-registry.rb, line 85
def map_classes
  names.map do |name|
    begin
      yield get(name)
    rescue UndefinedClass
      warn "undefined name: #{name} used in sequencing"
    end
  end
end
names() click to toggle source
# File lib/roadforest/utility/class-registry.rb, line 95
def names
  @sequence.tsort
end
seq(before, after) click to toggle source
# File lib/roadforest/utility/class-registry.rb, line 105
def seq(before, after)
  @sequence.add(before.to_sym, after.to_sym)
end