Module: AggregateRoot

Defined in:
lib/aggregate_root.rb,
lib/aggregate_root/version.rb,
lib/aggregate_root/configuration.rb,
lib/aggregate_root/default_apply_strategy.rb

Defined Under Namespace

Modules: ClassMethods Classes: Configuration, DefaultApplyStrategy

Constant Summary collapse

VERSION =
"0.27.0"
MissingHandler =
Class.new(StandardError)

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.configurationObject

Returns the value of attribute configuration.



3
4
5
# File 'lib/aggregate_root/configuration.rb', line 3

def configuration
  @configuration
end

Class Method Details

.configure {|configuration| ... } ⇒ Object

Yields:



6
7
8
9
# File 'lib/aggregate_root/configuration.rb', line 6

def self.configure
  self.configuration ||= Configuration.new
  yield(configuration)
end

.included(host_class) ⇒ Object



27
28
29
# File 'lib/aggregate_root.rb', line 27

def self.included(host_class)
  host_class.extend(ClassMethods)
end

Instance Method Details

#apply(*events) ⇒ Object



31
32
33
34
35
36
# File 'lib/aggregate_root.rb', line 31

def apply(*events)
  events.each do |event|
    apply_strategy.(self, event)
    unpublished << event
  end
end

#load(stream_name, event_store: default_event_store) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/aggregate_root.rb', line 38

def load(stream_name, event_store: default_event_store)
  @loaded_from_stream_name = stream_name
  events = event_store.read_stream_events_forward(stream_name)
  events.each do |event|
    apply(event)
  end
  @version = events.size - 1
  @unpublished_events = nil
  self
end

#store(stream_name = @loaded_from_stream_name, event_store: default_event_store) ⇒ Object



49
50
51
52
53
# File 'lib/aggregate_root.rb', line 49

def store(stream_name = @loaded_from_stream_name, event_store: default_event_store)
  event_store.publish_events(unpublished_events, stream_name: stream_name, expected_version: version)
  @version += unpublished_events.size
  @unpublished_events = nil
end

#unpublished_eventsObject



55
56
57
# File 'lib/aggregate_root.rb', line 55

def unpublished_events
  unpublished.each
end