class RailsDomainModel::Aggregate

Attributes

_loaded_from_stream_name[R]

Public Class Methods

on(*event_klasses, &block) click to toggle source
# 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_methods() click to toggle source
# 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

Public Instance Methods

_apply(*events) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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_events() click to toggle source
# File lib/rails_domain_model/aggregate.rb, line 50
def _unpublished_events
  _unpublished.each
end

Private Instance Methods

_apply_strategy() click to toggle source
# File lib/rails_domain_model/aggregate.rb, line 64
def _apply_strategy
  AggregateRoot::DefaultApplyStrategy.new(on_methods: self.class.on_methods)
end
_default_event_store() click to toggle source
# File lib/rails_domain_model/aggregate.rb, line 68
def _default_event_store
  AggregateRoot.configuration.default_event_store
end
_events_enumerator(event_store, stream_name) click to toggle source
# File lib/rails_domain_model/aggregate.rb, line 72
def _events_enumerator(event_store, stream_name)
  event_store.read.in_batches.stream(stream_name).each
end
_unpublished() click to toggle source
# File lib/rails_domain_model/aggregate.rb, line 56
def _unpublished
  @_unpublished_events ||= []
end
version() click to toggle source
# File lib/rails_domain_model/aggregate.rb, line 60
def version
  @_version ||= -1
end