class Synapse::EventStore::Mongo::DocumentPerCommitStrategy::CommitDocument
Mongo
document that represents a commit containing one or more events
Attributes
aggregate_id[R]
@return [Object]
Public Instance Methods
from_events(type_identifier, events, serializer)
click to toggle source
@param [String] type_identifier @param [Array] events @param [Serializer] serializer @return [CommitDocument]
# File lib/synapse/event_store/mongo/per_commit_strategy.rb, line 37 def from_events(type_identifier, events, serializer) first_event = events.first last_event = events.last @aggregate_type = type_identifier @aggregate_id = first_event.aggregate_id.to_s @first_sequence_number = first_event.sequence_number @last_sequence_number = last_event.sequence_number @first_timestamp = first_event.timestamp @last_timestamp = last_event.timestamp @events = Array.new events.each do |event| event_document = EventDocument.new event_document.from_event event, serializer @events.push event_document end self end
from_hash(hash)
click to toggle source
@param [Hash] hash @return [CommitDocument]
# File lib/synapse/event_store/mongo/per_commit_strategy.rb, line 61 def from_hash(hash) hash.symbolize_keys! @aggregate_id = hash.fetch :aggregate_id @aggregate_type = hash.fetch :aggregate_type @first_sequence_number = hash.fetch :first_sequence_number @last_sequence_number = hash.fetch :last_sequence_number @first_timestamp = hash.fetch :first_timestamp @last_timestamp = hash.fetch :last_timestamp @events = Array.new event_hashes = hash.fetch :events event_hashes.each do |event_hash| event_document = EventDocument.new event_document.from_hash event_hash @events.push event_document end self end
to_events(aggregate_id, serializer, upcaster_chain)
click to toggle source
@param [Object] aggregate_id
The actual aggregate identifier used to query the evnet store @param [Serializer] serializer @param [UpcasterChain] upcaster_chain @return [Array]
# File lib/synapse/event_store/mongo/per_commit_strategy.rb, line 108 def to_events(aggregate_id, serializer, upcaster_chain) events = Array.new @events.each do |event_document| event_data = DocumentDomainEventData.new aggregate_id, event_document context = Upcasting::SerializedDomainEventUpcastingContext.new event_data, aggregate_id, serializer upcast_objects = upcaster_chain.upcast event_document.payload, context upcast_objects.each do |upcast_object| upcast_data = Upcasting::UpcastSerializedDomainEventData.new event_data, 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 end events end
to_hash()
click to toggle source
@return [Hash]
# File lib/synapse/event_store/mongo/per_commit_strategy.rb, line 85 def to_hash events = Array.new @events.each do |event| events.push event.to_hash end { aggregate_id: @aggregate_id, aggregate_type: @aggregate_type, # Allows us to use the same query to filter events as DocumentPerEvent sequence_number: @first_sequence_number, first_sequence_number: @first_sequence_number, last_sequence_number: @last_sequence_number, # Allows us to use the same query to filter events as DocumentPerEvent timestamp: @first_timestamp, first_timestamp: @first_timestamp, last_timestamp: @last_timestamp, events: events } end