Module: Riffer::Registrable

Included in:
Agent, Tool
Defined in:
lib/riffer/registrable.rb

Overview

Registry of a class's named direct subclasses, keyed by identifier. Extend it onto a base class to look up subclasses in constant time via find and all.

class Riffer::Tool
extend Riffer::Registrable
end

Riffer::Tool.find("weather_tool") # => WeatherTool

Instance Method Summary collapse

Instance Method Details

#allObject

Returns all registered subclasses. Only named direct subclasses are registered: grandchildren are not included (call all on their direct parent instead), anonymous classes are never registered, and duplicate identifiers raise Riffer::DuplicateIdentifierError at first lookup.

--

Signature:

  • () -> Array[Class]



36
37
38
# File 'lib/riffer/registrable.rb', line 36

def all
  identifier_registry.values
end

#find(identifier) ⇒ Object

Finds a registered subclass by identifier, or nil when none matches. Only named direct subclasses are registered: grandchildren are not visible to a grandparent's find (call find on their direct parent instead), anonymous classes are never registered, and duplicate identifiers raise Riffer::DuplicateIdentifierError at first lookup.

--

Signature:

  • (String | Symbol) -> Class?



25
26
27
# File 'lib/riffer/registrable.rb', line 25

def find(identifier)
  identifier_registry[identifier.to_s]
end