class SimpleState::Machine
Public Class Methods
new(object, state_attribute = :state, definition = nil, &block)
click to toggle source
# File lib/simple_state/machine.rb, line 3 def initialize(object, state_attribute = :state, definition = nil, &block) @object = object @state_attribute = state_attribute @definition = definition || SimpleState::Definition.define(&block) define_trasition_methods end
Private Instance Methods
define_transition_method(name, from:, to:)
click to toggle source
# File lib/simple_state/machine.rb, line 21 def define_transition_method(name, from:, to:) define_singleton_method(:"can_#{name}?") do current_state = @object.public_send(@state_attribute) from.include?(current_state.to_sym) end define_singleton_method(:"#{name}!") do unless public_send(:"can_#{name}?") raise TransitionError, "Unable to transition from #{@object.public_send(@state_attribute)} to #{to}" end @object.public_send(:"#{@state_attribute}=", to) end end
define_trasition_methods()
click to toggle source
# File lib/simple_state/machine.rb, line 17 def define_trasition_methods transitions.each { |name, options| define_transition_method(name, options) } end
transitions()
click to toggle source
# File lib/simple_state/machine.rb, line 13 def transitions @definition[:transitions] end