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