Class: Decider::EventSourcing

Inherits:
Object
  • Object
show all
Defined in:
lib/decider/event_sourcing.rb

Instance Method Summary collapse

Constructor Details

#initialize(decider:, event_store:) ⇒ EventSourcing

Returns a new instance of EventSourcing.



5
6
7
8
# File 'lib/decider/event_sourcing.rb', line 5

def initialize(decider:, event_store:)
  @decider = decider
  @event_store = event_store
end

Instance Method Details

#call(command, stream_name:) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/decider/event_sourcing.rb', line 10

def call(command, stream_name:)
  events = event_store.read.stream(stream_name)
  state = events.reduce(decider.initial_state, &decider.method(:evolve))

  new_events = decider.decide(command, state)

  event_store.append(new_events, stream_name: stream_name, expected_version: events.count)

  [new_events, events.count + new_events.count]
end