lib/simplestate/state_holder.rb in simplestate-0.3.1 vs lib/simplestate/state_holder.rb in simplestate-1.0.0
- old
+ new
@@ -1,31 +1,41 @@
class StateHolder < SimpleDelegator
+ attr_reader :state_history
+ attr_accessor :hx_size_limit
def initialize(opts={})
+ @state_history = []
+ @hx_size_limit = opts.fetch :hx_size_limit, 5
# Set current_state to nil state within SimpleDelegator
- nil_state = NilState.new(nil,nil)
+ nil_state = NilState.new(nil)
super(nil_state)
# Then transition to the initial state class
initial_state_class = opts.fetch :start_in,
(opts.fetch :initial_state_class, nil)
transition_to initial_state_class
end
def transition_to(new_state_class)
+ update_state_history
current_state.send(:exit)
set_new_state(new_state_class)
current_state.send(:enter)
end
def current_state
__getobj__
end
def set_new_state(new_state_class)
- new_state = new_state_class.new(self, current_state.class)
+ new_state = new_state_class.new(self)
self.current_state = new_state
end
private
def current_state=(state)
__setobj__(state)
+ end
+
+ def update_state_history
+ @state_history << current_state
+ @state_history = @state_history.last(hx_size_limit)
end
end