Class: CDC::Core::EventMetadata

Inherits:
Object
  • Object
show all
Defined in:
lib/cdc/core/event_metadata.rb

Overview

Immutable metadata container for CDC domain objects.

Metadata keys are normalized to frozen strings. Nested hashes and arrays are recursively converted into Ractor-shareable objects. Values that Ruby cannot make shareable are stored as frozen #inspect strings.

Constant Summary collapse

EMPTY_DATA =
Ractor.make_shareable(
  {} # : Hash[untyped, untyped]
    .freeze
)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data = EMPTY_DATA) ⇒ EventMetadata

Build metadata from a hash-like structure.

Parameters:

  • data (Hash) (defaults to: EMPTY_DATA)

    metadata values



22
23
24
25
# File 'lib/cdc/core/event_metadata.rb', line 22

def initialize(data = EMPTY_DATA)
  @data = deep_shareable_hash(data)
  Ractor.make_shareable(self)
end

Instance Attribute Details

#dataHash{String=>Object} (readonly)

Returns normalized metadata.

Returns:

  • (Hash{String=>Object})

    normalized metadata



17
18
19
# File 'lib/cdc/core/event_metadata.rb', line 17

def data
  @data
end

Instance Method Details

#[](key) ⇒ Object?

Fetch a metadata value by string or symbol key.

Parameters:

  • key (String, Symbol)

    metadata key

Returns:

  • (Object, nil)

    metadata value for the given key



31
32
33
34
35
36
# File 'lib/cdc/core/event_metadata.rb', line 31

def [](key)
  string_key = key.to_s
  return data[string_key] if data.key?(string_key)

  data[key]
end

#to_hHash{String=>Object}

Return the normalized Ractor-shareable hash.

Returns:

  • (Hash{String=>Object})

    normalized Ractor-shareable metadata



41
42
43
# File 'lib/cdc/core/event_metadata.rb', line 41

def to_h
  data
end