Class: EventEngine::SchemaRegistry
- Inherits:
-
Object
- Object
- EventEngine::SchemaRegistry
- Defined in:
- lib/event_engine/schema_registry.rb
Overview
In-memory registry holding all event schemas by name and version. Loaded once at boot from the compiled schema file.
Defined Under Namespace
Classes: RegistryFrozenError, UnknownEventError
Instance Method Summary collapse
-
#event_schema ⇒ EventSchema
Returns the underlying EventSchema store.
-
#events ⇒ Array<Symbol>
Returns all registered event names.
-
#finalize! ⇒ void
Freezes the underlying schema, preventing further modifications.
-
#initialize(event_schema = EventSchema.new) ⇒ SchemaRegistry
constructor
A new instance of SchemaRegistry.
-
#latest_for(event_name) ⇒ EventDefinition::Schema?
Returns the latest schema version for an event.
-
#load_from_schema!(schema) ⇒ self
Populates the registry from a loaded EventSchema.
-
#loaded? ⇒ Boolean
Whether the registry has been loaded with schemas.
-
#register(schema) ⇒ Object
Registers a schema into the underlying EventSchema store.
-
#reset! ⇒ void
Clears the registry, allowing it to be reloaded.
-
#schema(event_name, version: nil) ⇒ EventDefinition::Schema
Looks up a schema by event name and optional version.
-
#versions_for(event_name) ⇒ Array<Integer>
Returns all version numbers for a given event.
Constructor Details
#initialize(event_schema = EventSchema.new) ⇒ SchemaRegistry
Returns a new instance of SchemaRegistry.
19 20 21 22 |
# File 'lib/event_engine/schema_registry.rb', line 19 def initialize(event_schema = EventSchema.new) @event_schema = event_schema @loaded = false end |
Instance Method Details
#event_schema ⇒ EventSchema
Returns the underlying EventSchema store.
104 105 106 |
# File 'lib/event_engine/schema_registry.rb', line 104 def event_schema @event_schema end |
#events ⇒ Array<Symbol>
Returns all registered event names.
34 35 36 |
# File 'lib/event_engine/schema_registry.rb', line 34 def events @event_schema.events end |
#finalize! ⇒ void
This method returns an undefined value.
Freezes the underlying schema, preventing further modifications.
111 112 113 |
# File 'lib/event_engine/schema_registry.rb', line 111 def finalize! @event_schema.finalize! end |
#latest_for(event_name) ⇒ EventDefinition::Schema?
Returns the latest schema version for an event.
97 98 99 |
# File 'lib/event_engine/schema_registry.rb', line 97 def latest_for(event_name) @event_schema.latest_for(event_name) end |
#load_from_schema!(schema) ⇒ self
Populates the registry from a loaded EventSchema. Can only be called once.
51 52 53 54 55 56 57 |
# File 'lib/event_engine/schema_registry.rb', line 51 def load_from_schema!(schema) raise RegistryFrozenError, "EventRegistry already loaded" if loaded? @event_schema = schema @loaded = true self end |
#loaded? ⇒ Boolean
Whether the registry has been loaded with schemas.
118 119 120 |
# File 'lib/event_engine/schema_registry.rb', line 118 def loaded? @loaded == true end |
#register(schema) ⇒ Object
Registers a schema into the underlying EventSchema store.
27 28 29 |
# File 'lib/event_engine/schema_registry.rb', line 27 def register(schema) @event_schema.register(schema) end |
#reset! ⇒ void
This method returns an undefined value.
Clears the registry, allowing it to be reloaded.
62 63 64 65 |
# File 'lib/event_engine/schema_registry.rb', line 62 def reset! @event_schema = {} @loaded = false end |
#schema(event_name, version: nil) ⇒ EventDefinition::Schema
Looks up a schema by event name and optional version. Returns the latest version when no version is specified.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/event_engine/schema_registry.rb', line 75 def schema(event_name, version: nil) raise RegistryFrozenError, "EventRegistry not loaded" unless loaded? schema = if version @event_schema.schema_for(event_name, version) else @event_schema.latest_for(event_name) end unless schema raise UnknownEventError, "Unknown #{version ? "version #{version} for " : ""}event: #{event_name}" end schema end |
#versions_for(event_name) ⇒ Array<Integer>
Returns all version numbers for a given event.
42 43 44 |
# File 'lib/event_engine/schema_registry.rb', line 42 def versions_for(event_name) @event_schema.versions_for(event_name) end |