Class: EventEngine::SchemaRegistry

Inherits:
Object
  • Object
show all
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.

Examples:

Look up a schema

schema = registry.schema(:cow_fed)
schema.event_version #=> 2

Look up a specific version

schema = registry.schema(:cow_fed, version: 1)

Defined Under Namespace

Classes: RegistryFrozenError, UnknownEventError

Instance Method Summary collapse

Constructor Details

#initialize(event_schema = EventSchema.new) ⇒ SchemaRegistry

Returns a new instance of SchemaRegistry.

Parameters:

  • event_schema (EventSchema) (defaults to: EventSchema.new)

    initial schema (empty by default)



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_schemaEventSchema

Returns the underlying EventSchema store.

Returns:



104
105
106
# File 'lib/event_engine/schema_registry.rb', line 104

def event_schema
  @event_schema
end

#eventsArray<Symbol>

Returns all registered event names.

Returns:

  • (Array<Symbol>)


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.

Parameters:

  • event_name (Symbol)

Returns:



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.

Parameters:

Returns:

  • (self)

Raises:



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.

Returns:

  • (Boolean)


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.

Parameters:



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.

Parameters:

  • event_name (Symbol)
  • version (Integer, nil) (defaults to: nil)

    specific version, or nil for latest

Returns:

Raises:



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.

Parameters:

  • event_name (Symbol)

Returns:

  • (Array<Integer>)

    sorted version numbers



42
43
44
# File 'lib/event_engine/schema_registry.rb', line 42

def versions_for(event_name)
  @event_schema.versions_for(event_name)
end