class Dry::Facts::Event

Attributes

data[R]
metadata[R]

Public Class Methods

aggregate_constructor() click to toggle source
# File lib/dry/facts/event.rb, line 14
def aggregate_constructor
  @@_aggregate_constructor = true
end
from_h(h) click to toggle source
# File lib/dry/facts/event.rb, line 18
def from_h(h)
  Object
  .const_get(h[:metadata][:type][:name])
  .new( data:     h[:data],
        metadata: h[:metadata])
end
new(data: {}) click to toggle source

object/hash has some infrastructure-related metadata? metadata id event-type-name event-type-version aggregate-id ? correlation-id ? causation-id ? stream-name data

# File lib/dry/facts/event.rb, line 37
def initialize  data:     {},
                metadata: {}
  @metadata = _default_metadata_merged_with(metadata) || Hash.new
  @data     = {}.merge(data) || Hash.new
  freeze
end

Public Instance Methods

aggregate_id() click to toggle source
# File lib/dry/facts/event.rb, line 56
def aggregate_id
  self.metadata[:aggregate_id]
end
id() click to toggle source
# File lib/dry/facts/event.rb, line 44
def id
  @metadata[:id]
end
to_h() click to toggle source
# File lib/dry/facts/event.rb, line 60
def to_h
  { data:     self.data,
    metadata: self.metadata }
end
uuid() click to toggle source
# File lib/dry/facts/event.rb, line 48
def uuid
  @metadata[:uuid]
end

Private Instance Methods

_default_metadata_merged_with(metadata={}) click to toggle source
# File lib/dry/facts/event.rb, line 67
def _default_metadata_merged_with(metadata={})
  generated_default_aggregate_id =  if @@_aggregate_constructor
                                      SecureRandom.uuid
                                    end
  generated_default_uuid = SecureRandom.uuid
  generated_default_id   = generated_default_uuid

  { id:           (generated_default_id),
    uuid:         (generated_default_uuid),
    aggregate_id: generated_default_aggregate_id,
    type:         { name:    self.class.name } }
  .merge(metadata || {})
end