我正在尝试为AASM
构建流程图。我有一个状态机,每个状态都有很多状态和很多事件。从AASM
状态机定义可视化机器很困难。要做到这一点,我想要三种方法如下,
1)返回所有状态的方法。这已由AASM
提供,即aasm.states.map(&:name)
2)返回特定状态的所有事件的方法。 AASM
已经提供了一种方法,可以返回当前状态的所有事件,即aasm.events.map(&:name)
。这几乎是我想要的,但我想将状态传递给方法。而不是使用当前状态我想使用传递的状态。
3)排除状态和事件的方法。该方法应在调用时返回下一个状态,而不实际更改状态机中的任何内容。像这样的东西,
next_1_1 = next_state(state1, event1)
next_1_2 = next_state(state1, event2)
next_1_3 = next_state(state1, event3)
next_2_4 = next_state(state2, event4)
next_2_5 = next_state(state2, event5)
next_2_6 = next_state(state2, event6)
有这样的可用吗?还有其他方法可以实现我想要的吗?
根据@ puneet18的回答,我的状态图如下
State Event next state
----------------------------------------
:not_started :start :in_progress
:in_progress :finish :finished
:reassign :reassigned
:finished :reassign :reassigned
如何使用适用于任何状态机的代码块生成这样的表,不管它有多复杂?