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