class Synapse::EventStore::Mongo::DocumentPerEventStrategy::EventDocument

Mongo document that represents a single domain event

Attributes

aggregate_id[R]

@return [Object]

id[R]

@return [String]

sequence_number[R]

@return [Integer]

timestamp[R]

@return [Time]

Public Instance Methods

from_event(event, type_identifier, serializer) click to toggle source

@param [DomainEventMessage] event @param [String] type_identifier @param [Serializer] serializer @return [EventDocument]

# File lib/synapse/event_store/mongo/per_event_strategy.rb, line 59
def from_event(event, type_identifier, serializer)
  serialization_target = String
  if serializer.can_serialize_to? Hash
    serialization_target = Hash
  end

  serialized_metadata = serializer.serialize_metadata event, serialization_target
  serialized_payload = serializer.serialize_payload event, serialization_target

  @id = event.id
  @metadata = serialized_metadata.content
  @payload = serialized_payload.content
  @payload_type = serialized_payload.type.name
  @payload_revision = serialized_payload.type.revision
  @timestamp = event.timestamp
  @aggregate_id = event.aggregate_id
  @aggregate_type = type_identifier
  @sequence_number = event.sequence_number

  self
end
from_hash(hash) click to toggle source

@param [Hash] hash @return [EventDocument]

# File lib/synapse/event_store/mongo/per_event_strategy.rb, line 83
def from_hash(hash)
  hash.symbolize_keys!

  @id = hash.fetch :_id
  @metadata = hash.fetch :metadata
  @payload = hash.fetch :payload
  @payload_type = hash.fetch :payload_type
  @payload_revision = hash.fetch :payload_revision
  @timestamp = hash.fetch :timestamp
  @aggregate_id = hash.fetch :aggregate_id
  @aggregate_type = hash.fetch :aggregate_type
  @sequence_number = hash.fetch :sequence_number

  self
end
metadata() click to toggle source

@param [SerializedObject]

# File lib/synapse/event_store/mongo/per_event_strategy.rb, line 45
def metadata
  Serialization::SerializedMetadata.new @metadata, @metadata.class
end
payload() click to toggle source

@param [SerializedObject]

# File lib/synapse/event_store/mongo/per_event_strategy.rb, line 50
def payload
  Serialization::SerializedObject.new @payload, @payload.class,
    Serialization::SerializedType.new(@payload_type, @payload_revision)
end
to_events(aggregate_id, serializer, upcaster_chain) click to toggle source

@param [Object] aggregate_id @param [Serializer] serializer @param [UpcasterChain] upcaster_chain @return [Array]

# File lib/synapse/event_store/mongo/per_event_strategy.rb, line 116
def to_events(aggregate_id, serializer, upcaster_chain)
  events = Array.new

  context = Upcasting::SerializedDomainEventUpcastingContext.new self, aggregate_id, serializer
  upcast_objects = upcaster_chain.upcast payload, context
  upcast_objects.each do |upcast_object|
    upcast_data = Upcasting::UpcastSerializedDomainEventData.new self, aggregate_id, upcast_object

    builder = Serialization::SerializedDomainEventMessageBuilder.new

    # Prevent duplicate serialization of metadata if it was accessed during upcasting
    metadata = context.serialized_metadata
    if metadata.deserialized?
      builder.metadata = Serialization::DeserializedObject.new metadata.deserialized
    end

    builder.from_data upcast_data, serializer

    events.push builder.build
  end

  events
end
to_hash() click to toggle source

@return [Hash]

# File lib/synapse/event_store/mongo/per_event_strategy.rb, line 100
def to_hash
  { _id: @id,
    metadata: @metadata,
    payload: @payload,
    payload_type: @payload_type,
    payload_revision: @payload_revision,
    timestamp: @timestamp,
    aggregate_id: @aggregate_id,
    aggregate_type: @aggregate_type,
    sequence_number: @sequence_number }
end