Class: Uniword::ElementRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/uniword/element_registry.rb

Overview

Registry for all element classes Responsibility: Maintain a registry of element classes and provide factory methods

This class follows the Registry pattern to enable:

  • Automatic registration of element classes via Element.inherited

  • Runtime element discovery

  • Factory method for creating elements by tag/type

Class Method Summary collapse

Class Method Details

.allArray<Class>

Get all registered element classes

Returns:

  • (Array<Class>)

    Array of registered element classes



49
50
51
# File 'lib/uniword/element_registry.rb', line 49

def all
  registry.values
end

.clearvoid

This method returns an undefined value.

Clear the registry (primarily for testing)



71
72
73
# File 'lib/uniword/element_registry.rb', line 71

def clear
  registry.clear
end

.countInteger

Get the number of registered elements

Returns:

  • (Integer)

    Number of registered elements



78
79
80
# File 'lib/uniword/element_registry.rb', line 78

def count
  registry.size
end

.create(tag, attributes = {}) ⇒ Element?

Create an element instance by tag name

Parameters:

  • tag (String, Symbol)

    The element tag/type name

  • attributes (Hash) (defaults to: {})

    Attributes to initialize the element with

Returns:

  • (Element, nil)

    The created element instance or nil if not found



31
32
33
34
35
36
# File 'lib/uniword/element_registry.rb', line 31

def create(tag, attributes = {})
  element_class = find(tag)
  return nil unless element_class

  element_class.new(attributes)
end

.find(tag) ⇒ Class?

Find an element class by tag name

Parameters:

  • tag (String, Symbol)

    The element tag/type name

Returns:

  • (Class, nil)

    The element class or nil if not found



42
43
44
# File 'lib/uniword/element_registry.rb', line 42

def find(tag)
  registry[normalize_key(tag)]
end

.register(element_class) ⇒ void

This method returns an undefined value.

Register an element class

Parameters:

  • element_class (Class)

    The element class to register



17
18
19
20
21
22
23
24
# File 'lib/uniword/element_registry.rb', line 17

def register(element_class)
  return if element_class.respond_to?(:abstract?) && element_class.abstract?

  key = element_class_key(element_class)
  return if key.nil? # Skip anonymous classes

  registry[key] = element_class
end

.registered?(tag) ⇒ Boolean

Check if a tag is registered

Parameters:

  • tag (String, Symbol)

    The element tag/type name

Returns:

  • (Boolean)

    true if registered, false otherwise



64
65
66
# File 'lib/uniword/element_registry.rb', line 64

def registered?(tag)
  registry.key?(normalize_key(tag))
end

.tagsArray<String>

Get all registered tag names

Returns:

  • (Array<String>)

    Array of registered tag names



56
57
58
# File 'lib/uniword/element_registry.rb', line 56

def tags
  registry.keys
end