module NxtStateMachine::ActiveRecord::InstanceMethods
Private Instance Methods
execute_transition(target, transition, state_attr, save_with_method)
click to toggle source
# File lib/nxt_state_machine/integrations/active_record.rb, line 78 def execute_transition(target, transition, state_attr, save_with_method) transition.execute do |block| result = block ? block.call : nil target.assign_attributes(state_attr => transition.to.to_s) set_state_result = target.send(save_with_method) || halt_transition block ? result : set_state_result end end
lock_transition?(event)
click to toggle source
# File lib/nxt_state_machine/integrations/active_record.rb, line 93 def lock_transition?(event) event.options.fetch(:lock_transitions) { state_machine.options.fetch(:lock_transitions) } end
set_state(machine, target, transition, state_attr, save_with_method)
click to toggle source
# File lib/nxt_state_machine/integrations/active_record.rb, line 49 def set_state(machine, target, transition, state_attr, save_with_method) result = nil defused_error = nil with_conditional_lock(target, transition.event) do transition.run_before_callbacks result = execute_transition(target, transition, state_attr, save_with_method) transition.run_after_callbacks result rescue StandardError => error if machine.defuse_registry.resolve!(transition).find { |error_class| error.is_a?(error_class) } defused_error = error else raise error end end raise defused_error if defused_error transition.run_success_callbacks || result rescue StandardError => error target.assign_attributes(state_attr => transition.from.to_s) raise unless save_with_method == :save && error.is_a?(NxtStateMachine::Errors::TransitionHalted) false end
with_conditional_lock(target, event, &block)
click to toggle source
# File lib/nxt_state_machine/integrations/active_record.rb, line 87 def with_conditional_lock(target, event, &block) return block.call unless lock_transition?(event) target.with_lock { block.call } end