Class: Eventusha::Aggregate

Inherits:
Object
  • Object
show all
Defined in:
lib/eventusha/aggregate.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#aggregate_idObject (readonly)

Returns the value of attribute aggregate_id.



3
4
5
# File 'lib/eventusha/aggregate.rb', line 3

def aggregate_id
  @aggregate_id
end

Class Method Details

.build_from(events) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/eventusha/aggregate.rb', line 24

def self.build_from(events)
  object = self.new
  return object if events.blank?

  events.each do |event|
    event = event.becomes(event.name.constantize)
    object.apply(event, published: true)
  end

  object
end

.find(aggregate_id) ⇒ Object



13
14
15
16
# File 'lib/eventusha/aggregate.rb', line 13

def self.find(aggregate_id)
  events = Event.where(aggregate_id: aggregate_id)
  build_from(events)
end

.on(*event_classes, &block) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/eventusha/aggregate.rb', line 5

def self.on(*event_classes, &block)
  event_classes.each do |event_class|
    handler_name = "on_#{event_class.name.demodulize.underscore}"
    define_method(handler_name, block)
    private(handler_name)
  end
end

Instance Method Details

#apply(event, published: false) ⇒ Object



18
19
20
21
22
# File 'lib/eventusha/aggregate.rb', line 18

def apply(event, published: false)
  create_event(event) unless published

  send(apply_event_method_name(event), event)
end