module QueuedStateMachine
Public Class Methods
included(base)
click to toggle source
# File lib/queued_state_machine.rb, line 5 def self.included(base) base.extend(ClassMethods) end
new()
click to toggle source
Calls superclass method
# File lib/queued_state_machine.rb, line 100 def initialize super @state = self.class.initial_state @pending_transitions = [] end
Public Instance Methods
at()
click to toggle source
# File lib/queued_state_machine.rb, line 126 def at @state end
at?(arg)
click to toggle source
# File lib/queued_state_machine.rb, line 130 def at?(arg) list = self.class.clean_state_list(arg) raise if list == nil list.include?(@state) end
quietly_to(state)
click to toggle source
# File lib/queued_state_machine.rb, line 122 def quietly_to(state) to(state, quiet: true) end
to(state, quiet: false)
click to toggle source
# File lib/queued_state_machine.rb, line 106 def to(state, quiet: false) from = @state to = self.class.clean_state(state) @pending_transitions << {from: from, to: to, quiet: quiet} return if @pending_transitions.length > 1 loop do next_transition = @pending_transitions.first break unless next_transition @state = next_transition[:to] unless next_transition[:quiet] process_transition(next_transition[:from], next_transition[:to]) end @pending_transitions.shift end end
Private Instance Methods
process_transition(from, to)
click to toggle source
# File lib/queued_state_machine.rb, line 138 def process_transition(from, to) valid_transitions = self.class.transitions.select do |transition| transition[:from].include?(from) && transition[:to].include?(to) end if valid_transitions.empty? raise InvalidTransition, "Error: no valid transition from '#{from}' to '#{to}'" end valid_callbacks = self.class.callbacks.select do |transition| transition[:from].include?(from) && transition[:to].include?(to) end valid_callbacks.each { |callback| instance_eval(&callback[:callback]) } end