Class: RailsDomainModel::Aggregate

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

Direct Known Subclasses

DomainAggregate

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.on(*event_klasses, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
# File 'lib/rails_domain_model/aggregate.rb', line 9

def self.on(*event_klasses, &block)
  event_klasses.each do |event_klass|
    name = event_klass.name || raise(ArgumentError, "Anonymous class is missing name")
    handler_name = "on_#{name}"
    define_method(handler_name, &block)
    @on_methods ||= {}
    @on_methods[event_klass]=handler_name
    private(handler_name)
  end
end

.on_methodsObject



20
21
22
23
24
25
# File 'lib/rails_domain_model/aggregate.rb', line 20

def self.on_methods
  ancestors.
    select{|k| k.instance_variables.include?(:@on_methods)}.
    map{|k| k.instance_variable_get(:@on_methods) }.
    inject({}, &:merge)
end

Instance Method Details

#_apply(*events) ⇒ Object



27
28
29
30
31
32
# File 'lib/rails_domain_model/aggregate.rb', line 27

def _apply(*events)
  events.each do |event|
    _apply_strategy.(self, event)
    _unpublished << event
  end
end

#_load(stream_name, event_store: _default_event_store) ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/rails_domain_model/aggregate.rb', line 34

def _load(stream_name, event_store: _default_event_store)
  @_loaded_from_stream_name = stream_name
  _events_enumerator(event_store, stream_name).with_index do |event, index|
    _apply(event)
    @_version = index
  end
  @_unpublished_events = nil
  self
end

#_store(stream_name = _loaded_from_stream_name, event_store: _default_event_store) ⇒ Object



44
45
46
47
48
# File 'lib/rails_domain_model/aggregate.rb', line 44

def _store(stream_name = _loaded_from_stream_name, event_store: _default_event_store)
  event_store.publish(_unpublished, stream_name: stream_name, expected_version: version)
  @_version += _unpublished_events.size
  @_unpublished_events = nil
end

#_unpublished_eventsObject



50
51
52
# File 'lib/rails_domain_model/aggregate.rb', line 50

def _unpublished_events
  _unpublished.each
end