Class: Decider::State

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

Instance Method Summary collapse

Constructor Details

#initialize(decider:, repository:) ⇒ State

Returns a new instance of State.



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

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

Instance Method Details

#call(command, key:, etag: nil) ⇒ Object



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

def call(command, key:, etag: nil)
  state, etag = repository.try_load(key: key, etag: etag)

  events = decider.decide(command, state)
  new_state = events.reduce(state, &decider.method(:evolve))

  new_etag = repository.save(new_state, key: key, etag: etag)

  [events, new_etag]
end