Class: RailsDomainModel::Aggregate
- Inherits:
-
Object
- Object
- RailsDomainModel::Aggregate
- Defined in:
- lib/rails_domain_model/aggregate.rb
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
- #_apply(*events) ⇒ Object
- #_load(stream_name, event_store: _default_event_store) ⇒ Object
- #_store(stream_name = _loaded_from_stream_name, event_store: _default_event_store) ⇒ Object
- #_unpublished_events ⇒ Object
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_methods ⇒ Object
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_events ⇒ Object
50 51 52 |
# File 'lib/rails_domain_model/aggregate.rb', line 50 def _unpublished_events _unpublished.each end |