Class: Coradoc::AsciiDoc::Serializer::ElementRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/asciidoc/serializer/element_registry.rb

Overview

Registry for mapping Coradoc model classes to their AsciiDoc serializers. This is the authoritative source for model→serializer mappings.

Pattern mirrors Input::Html::Converters registry for symmetry.

Examples:

Registering a custom serializer

ElementRegistry.override(Model::Paragraph, CustomParagraphSerializer)

Wrapping an existing serializer

original = ElementRegistry.get(Model::Paragraph)
ElementRegistry.override(Model::Paragraph, WrapperSerializer.new(original))

Class Method Summary collapse

Class Method Details

.clear!Object

Clear all registrations (mainly for testing)



82
83
84
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 82

def clear!
  registry.clear
end

.get(model_class) ⇒ Class?

Get the serializer for a model class without raising

Parameters:

  • model_class (Class)

    The model class

Returns:

  • (Class, nil)

    The serializer class, or nil if not registered



47
48
49
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 47

def get(model_class)
  registry[model_class]
end

.lookup(model_class) ⇒ Class

Lookup serializer for a model class

Parameters:

  • model_class (Class)

    The model class

Returns:

  • (Class)

    The serializer class

Raises:

  • (ArgumentError)

    If no serializer is registered



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 55

def lookup(model_class)
  serializer_class = registry[model_class]

  unless serializer_class
    raise ArgumentError,
          "No serializer registered for #{model_class.name}. " \
          'Please register a serializer in ElementRegistry, or the serializer ' \
          'may not have been loaded yet (check Registrations.load_all!)'
  end

  serializer_class
end

.override(model_class, serializer_class) ⇒ Class?

Override a serializer for a model class This is an alias for register that makes the intent explicit

Parameters:

  • model_class (Class)

    The Coradoc model class

  • serializer_class (Class)

    The new serializer class

Returns:

  • (Class, nil)

    The previous serializer class, or nil if none



31
32
33
34
35
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 31

def override(model_class, serializer_class)
  previous = registry[model_class]
  registry[model_class] = serializer_class
  previous
end

.register(model_class, serializer_class) ⇒ Object

Register a serializer for a model class

Parameters:

  • model_class (Class)

    The Coradoc model class

  • serializer_class (Class)

    The serializer class



22
23
24
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 22

def register(model_class, serializer_class)
  registry[model_class] = serializer_class
end

.registered?(model_class) ⇒ Boolean

Check if a model class has a registered serializer

Parameters:

  • model_class (Class)

    The model class

Returns:

  • (Boolean)

    True if registered



77
78
79
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 77

def registered?(model_class)
  registry.key?(model_class)
end

.registered_modelsArray<Class>

Get all registered model classes

Returns:

  • (Array<Class>)

    Array of registered model classes



70
71
72
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 70

def registered_models
  registry.keys
end

.registryHash

Get the registry hash

Returns:

  • (Hash)

    Model class => Serializer class mapping



88
89
90
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 88

def registry
  @@registry ||= {}
end

.unregister(model_class) ⇒ Class?

Unregister a serializer for a model class

Parameters:

  • model_class (Class)

    The model class to unregister

Returns:

  • (Class, nil)

    The removed serializer class, or nil if none



40
41
42
# File 'lib/coradoc/asciidoc/serializer/element_registry.rb', line 40

def unregister(model_class)
  registry.delete(model_class)
end