Class: RoadForest::Utility::ClassRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/roadforest/utility/class-registry.rb

Defined Under Namespace

Modules: Registrar Classes: NameSequence, UndefinedClass

Instance Method Summary collapse

Constructor Details

#initialize(registrar, purpose = nil) ⇒ ClassRegistry

Returns a new instance of ClassRegistry.



43
44
45
46
47
48
49
50
51
52
53
54
55
# 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

Instance Method Details

#add(name, klass) ⇒ Object



99
100
101
102
103
# 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) ⇒ Object



111
112
113
114
115
# 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 { ... } ⇒ Object

Yields:

  • each class in name order



85
86
87
88
89
90
91
92
93
# 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

#namesObject



95
96
97
# File 'lib/roadforest/utility/class-registry.rb', line 95

def names
  @sequence.tsort
end

#seq(before, after) ⇒ Object



105
106
107
# File 'lib/roadforest/utility/class-registry.rb', line 105

def seq(before, after)
  @sequence.add(before.to_sym, after.to_sym)
end