Class: Philiprehberger::StateMachine::History

Inherits:
Object
  • Object
show all
Defined in:
lib/philiprehberger/state_machine/history.rb

Overview

Tracks state history with timestamps.

Defined Under Namespace

Classes: Entry

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(initial_state, max_size: 100) ⇒ History

Returns a new instance of History.

Parameters:

  • initial_state (Symbol)

    the starting state

  • max_size (Integer) (defaults to: 100)

    maximum number of entries to retain



13
14
15
16
# File 'lib/philiprehberger/state_machine/history.rb', line 13

def initialize(initial_state, max_size: 100)
  @max_size = max_size
  @entries = [Entry.new(state: initial_state, entered_at: Time.now)]
end

Instance Attribute Details

#max_sizeObject (readonly)

Returns the value of attribute max_size.



9
10
11
# File 'lib/philiprehberger/state_machine/history.rb', line 9

def max_size
  @max_size
end

Instance Method Details

#entriesArray<Hash>

Return all history entries as an array of hashes.

Returns:

  • (Array<Hash>)


29
30
31
# File 'lib/philiprehberger/state_machine/history.rb', line 29

def entries
  @entries.map { |e| { state: e.state, entered_at: e.entered_at } }
end

#previous_stateSymbol?

Return the previous state (before the current one).

Returns:

  • (Symbol, nil)


36
37
38
39
40
# File 'lib/philiprehberger/state_machine/history.rb', line 36

def previous_state
  return nil if @entries.size < 2

  @entries[-2].state
end

#record(state) ⇒ Object

Record a new state entry.

Parameters:

  • state (Symbol)


21
22
23
24
# File 'lib/philiprehberger/state_machine/history.rb', line 21

def record(state)
  @entries << Entry.new(state: state, entered_at: Time.now)
  @entries.shift if @entries.size > @max_size
end

#sizeInteger

Number of recorded entries.

Returns:

  • (Integer)


45
46
47
# File 'lib/philiprehberger/state_machine/history.rb', line 45

def size
  @entries.size
end