module Transitionable
Constants
- VERSION
Public Instance Methods
validate_transition(target_state:) { |invalid_state_transition| ... }
click to toggle source
# File lib/transitionable.rb, line 43 def validate_transition(target_state:) self.class.state_machines.each do |machine_name, machine| next unless machine[:states].include?(target_state) current_state = send(machine_name) matched_transition = machine[:transitions].detect do |transition| transition[:from] == current_state && transition[:to] == target_state end return true if matched_transition.present? yield(InvalidStateTransition.new(current_state, target_state)) if block_given? return false end # raise error if can't find the provided target state raise InvalidStateTransition.new(nil, target_state) end
validate_transition!(target_state:)
click to toggle source
# File lib/transitionable.rb, line 35 def validate_transition!(target_state:) current_state = current_state_based_on(target_state) unless validate_transition(target_state: target_state) raise InvalidStateTransition.new(current_state, target_state) end true end
Private Instance Methods
current_state_based_on(target_state)
click to toggle source
# File lib/transitionable.rb, line 60 def current_state_based_on(target_state) self.class.state_machines.each do |machine_name, machine| return send(machine_name) if machine[:states].include?(target_state) end raise InvalidStateTransition.new(nil, target_state) end