class PrettyStateMachine::Machine
Attributes
state[R]
Public Class Methods
initial_state()
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 14 def self.initial_state states.values.find(&:initial?) end
new(state=self.class.initial_state)
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 43 def initialize(state=self.class.initial_state) raise InvalidMachine.new('an initial state is required') if state.nil? @state = State(state) end
state(name, options={})
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 18 def self.state(name, options={}) initial = options.fetch(:initial) { false } state = State.new(name, initial: initial) states[name] = state end
states()
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 6 def self.states @_states ||= {} end
transition(name, &block)
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 24 def self.transition(name, &block) transition = Transition.new(self, name) transition.instance_eval(&block) if transition.to_state.nil? raise InvalidTransition, "transition '#{name}' requires an end state" end define_method(name) do if transition.permitted_from?(@state) @state = transition.to_state else raise InvalidTransition, "cannot transition to '#{transition.to_state}' via '#{name}' from '#{@state}'" end end transitions[name] = transition end
transitions()
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 10 def self.transitions @_transitions ||= {} end
Protected Class Methods
state_from_name(state_name)
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 50 def self.state_from_name(state_name) states.fetch(state_name) do raise InvalidState.new("'#{state_name}' is an invalid state") end end
Protected Instance Methods
State(arg)
click to toggle source
# File lib/pretty_state_machine/machine.rb, line 56 def State(arg) case arg when State then arg when Symbol then self.class.state_from_name(arg) else raise TypeError, "cannot convert #{arg.inspect} to State" end end