class AASM::Core::Event
def _fire(obj, options={}, to_state=::AASM::NO_VALUE, *args)
def _fire(obj, options={}, to_state=::AASM::NO_VALUE, *args) result = options[:test_only] ? false : nil clear_failed_callbacks transitions = @transitions.select { |t| t.from == obj.aasm(state_machine.name).current_state || t.from == nil} return result if transitions.size == 0 if to_state == ::AASM::NO_VALUE to_state = nil elsif !(to_state.respond_to?(:to_sym) && transitions.map(&:to).flatten.include?(to_state.to_sym)) # to_state is an argument args.unshift(to_state) to_state = nil end # nop, to_state is a valid to-state transitions.each do |transition| next if to_state and !Array(transition.to).include?(to_state) if (options.key?(:may_fire) && transition.eql?(options[:may_fire])) || (!options.key?(:may_fire) && transition.allowed?(obj, *args)) if options[:test_only] result = transition else result = to_state || Array(transition.to).first Array(transition.to).each {|to| @valid_transitions[obj.object_id][to] = transition } transition.execute(obj, *args) end break end end result end