我正在尝试为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
我将如何生成这样的表格,其中包含适用于任何状态机的代码块,无论它有多复杂?