Class: Coradoc::Serializer::Registry
- Inherits:
-
Object
- Object
- Coradoc::Serializer::Registry
- Defined in:
- lib/coradoc/serializer/registry.rb
Overview
Registry for document element serializers
Provides a registry-based pattern for looking up serializers for document element types. This allows users to register custom serializers for their own element types or override existing serializers.
Class Method Summary collapse
-
.clear ⇒ Hash
Clear all registered serializers.
-
.lookup(model) ⇒ Class?
Look up a serializer for a model instance or class.
-
.register(model_class, serializer_class) ⇒ Class?
Register a serializer for a model class.
-
.registered?(model) ⇒ Boolean
Check if a serializer is registered for a model.
-
.registered_models ⇒ Array<Class>
Get all registered model classes.
-
.registry ⇒ Hash
Get the global registry instance.
-
.serialize(model, format: :adoc, **options) ⇒ String?
Serialize a model using its registered serializer.
-
.unregister(model_class) ⇒ Class?
Unregister a serializer for a model class.
Class Method Details
.clear ⇒ Hash
Clear all registered serializers
89 90 91 |
# File 'lib/coradoc/serializer/registry.rb', line 89 def clear @registry = {} end |
.lookup(model) ⇒ Class?
Look up a serializer for a model instance or class
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/coradoc/serializer/registry.rb', line 53 def lookup(model) model_class = model.is_a?(Class) ? model : model.class key = class_key(model_class) # Direct lookup return registry[key] if registry.key?(key) # Try parent classes model_class.ancestors.each do |ancestor| next if ancestor == model_class || ancestor == Object ancestor_key = class_key(ancestor) return registry[ancestor_key] if registry.key?(ancestor_key) end nil end |
.register(model_class, serializer_class) ⇒ Class?
Register a serializer for a model class
33 34 35 36 37 38 |
# File 'lib/coradoc/serializer/registry.rb', line 33 def register(model_class, serializer_class) key = class_key(model_class) previous = registry[key] registry[key] = serializer_class previous end |
.registered?(model) ⇒ Boolean
Check if a serializer is registered for a model
75 76 77 |
# File 'lib/coradoc/serializer/registry.rb', line 75 def registered?(model) !lookup(model).nil? end |
.registered_models ⇒ Array<Class>
Get all registered model classes
82 83 84 |
# File 'lib/coradoc/serializer/registry.rb', line 82 def registered_models registry.keys end |
.registry ⇒ Hash
Get the global registry instance
24 25 26 |
# File 'lib/coradoc/serializer/registry.rb', line 24 def registry @registry ||= {} end |
.serialize(model, format: :adoc, **options) ⇒ String?
Serialize a model using its registered serializer
99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/coradoc/serializer/registry.rb', line 99 def serialize(model, format: :adoc, **) serializer_class = lookup(model) return nil unless serializer_class serializer = serializer_class.respond_to?(:new) ? serializer_class.new : serializer_class if serializer.respond_to?(:serialize) serializer.serialize(model, format: format, **) elsif serializer.respond_to?(:to_s) serializer.to_s else model.to_s end end |
.unregister(model_class) ⇒ Class?
Unregister a serializer for a model class
44 45 46 47 |
# File 'lib/coradoc/serializer/registry.rb', line 44 def unregister(model_class) key = class_key(model_class) registry.delete(key) end |