module Synapse::EventSourcing::Member

Base mixin for a member of an aggregate which has its state mutated by events that are applied to the aggregate

@see AggregateRoot @see Entity

Protected Instance Methods

child_entities() click to toggle source

Returns an array of the child entities of this aggregate member @return [Array]

# File lib/synapse/event_sourcing/member.rb, line 49
def child_entities
  entities = Array.new

  self.class.child_entities.each do |field|
    value = instance_variable_get '@' + field

    if value.is_a? Entity
      entities.push value

    # Hashes
    elsif value.is_a? Hash
      entities.concat filter_entities value.each_key
      entities.concat filter_entities value.each_value

    # Sets, arrays
    elsif value.is_a? Enumerable
      entities.concat filter_entities value
    end
  end

  entities
end
handle_event(event) click to toggle source

If the event is relative to this member, its parameters will be used to change the state of this member

@param [EventMessage] event @return [undefined]

# File lib/synapse/event_sourcing/member.rb, line 77
def handle_event(event)
  mapping = self.event_mapper.mapping_for event.payload_type
  if mapping
    mapping.invoke self, event.payload, event
  end
end

Private Instance Methods

filter_entities(entities) click to toggle source

@param [Array] entities @return [Array]

# File lib/synapse/event_sourcing/member.rb, line 88
def filter_entities(entities)
  entities.select do |entity|
    entity.is_a? Member
  end
end