Class: Takagi::Serialization::Registry
- Inherits:
-
Object
- Object
- Takagi::Serialization::Registry
- Extended by:
- Registry::Base
- Defined in:
- lib/takagi/serialization/registry.rb
Overview
Registry for content-format serializers
Manages serializer instances and provides encoding/decoding dispatch. Thread-safe singleton registry using Registry::Base.
Class Method Summary collapse
-
.decode(bytes, code) ⇒ Object
Decode bytes using appropriate serializer.
-
.encode(data, code) ⇒ String
Encode data using appropriate serializer.
-
.register(code, serializer, **metadata) ⇒ void
Register a serializer for a content-format code.
-
.serializer_for(code) ⇒ Base?
(also: for)
Get serializer for content-format code.
-
.summary ⇒ String
Get human-readable summary of registered formats.
-
.supported_formats ⇒ Array<Integer>
Get list of supported content-format codes.
-
.supports?(code) ⇒ Boolean
Check if format is supported.
Methods included from Registry::Base
[], clear!, count, each, empty?, entries, extended, get, keys, metadata_for, register, registered?, unregister
Class Method Details
.decode(bytes, code) ⇒ Object
Decode bytes using appropriate serializer
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/takagi/serialization/registry.rb', line 82 def decode(bytes, code) serializer = serializer_for(code) raise UnknownFormatError, "No serializer for content-format #{code}" unless serializer serializer.decode(bytes) rescue UnknownFormatError, DecodeError raise rescue StandardError => e raise DecodeError, "Decoding failed for format #{code}: #{e.}" end |
.encode(data, code) ⇒ String
Encode data using appropriate serializer
61 62 63 64 65 66 67 68 69 70 |
# File 'lib/takagi/serialization/registry.rb', line 61 def encode(data, code) serializer = serializer_for(code) raise UnknownFormatError, "No serializer for content-format #{code}" unless serializer serializer.encode(data) rescue UnknownFormatError, EncodeError raise rescue StandardError => e raise EncodeError, "Encoding failed for format #{code}: #{e.}" end |
.register(code, serializer, **metadata) ⇒ void
This method returns an undefined value.
Register a serializer for a content-format code
34 35 36 37 |
# File 'lib/takagi/serialization/registry.rb', line 34 def register(code, serializer, **) instance = instantiate_serializer(serializer) super(code, instance, **) end |
.serializer_for(code) ⇒ Base? Also known as: for
Get serializer for content-format code
46 47 48 |
# File 'lib/takagi/serialization/registry.rb', line 46 def serializer_for(code) self[code] end |
.summary ⇒ String
Get human-readable summary of registered formats
124 125 126 127 128 129 130 131 132 |
# File 'lib/takagi/serialization/registry.rb', line 124 def summary lines = ["Registered Serializers:"] # Get snapshot to avoid holding lock during iteration snapshot = @mutex.synchronize { registry.dup } snapshot.sort.each do |code, serializer| lines << " #{code}: #{serializer.content_type} (#{serializer.name})" end lines.join("\n") end |
.supported_formats ⇒ Array<Integer>
Get list of supported content-format codes
111 112 113 |
# File 'lib/takagi/serialization/registry.rb', line 111 def supported_formats keys.sort end |
.supports?(code) ⇒ Boolean
Check if format is supported
101 102 103 |
# File 'lib/takagi/serialization/registry.rb', line 101 def supports?(code) registered?(code) end |