module NxtStateMachine::AttrAccessor::ClassMethods
Public Instance Methods
state_machine(name = :default, state_attr: :state, target: nil, &config)
click to toggle source
Calls superclass method
# File lib/nxt_state_machine/integrations/attr_accessor.rb, line 4 def state_machine(name = :default, state_attr: :state, target: nil, &config) machine = super( name, state_attr: state_attr, target: target, &config ) machine.get_state_with do |target| if target.send(state_attr).nil? target.send("#{state_attr}=", initial_state.enum) end target.send(state_attr) end machine.set_state_with do |target, transition| transition.run_before_callbacks result = set_state(target, transition, state_attr) transition.run_after_callbacks transition.run_success_callbacks || result rescue StandardError => error target.send("#{state_attr}=", transition.from.enum) if error.is_a?(NxtStateMachine::Errors::TransitionHalted) false else raise end end machine.set_state_with! do |target, transition| transition.run_before_callbacks result = set_state(target, transition, state_attr) transition.run_after_callbacks transition.run_success_callbacks || result rescue StandardError target.send("#{state_attr}=", transition.from.enum) raise end machine end