workflow/README.md
Alexander Kiryukhin c8749e6f6b Initial
2019-12-08 13:40:57 +03:00

1.2 KiB

Workflow for Go

Simple state machine. Inspired by Symfony Workflow.

Example usage

o := new(ObjectImplementedPlaceer)

w := NewWorkflow("initial")
w.AddTransition("From initial to A", []Place{"initial"}, "A")
w.AddTransition("From initial to B", []Place{"initial"}, "B")
w.AddTransition("From A to C", []Place{"A"}, "C")
w.AddTransition("From B,C to D", []Place{"B", "C"}, "D")
w.AddTransition("From C,D to Finish", []Place{"C", "D"}, "Finish")

w.Can(o, "From initial to A") // == nil
w.Can(o, "From A to C") // == ErrCantApply

w.GetEnabledTransitions(o) // []string{"From initial to A", "From initial to B"}
w.Apply(o, "From inital to A") // o now at "A" place
w.GetEnabledTransitions(o) // []string{"From A to C"}

w.DumpToDot() // See above

Dump result

digraph {
        initial[color="blue"];
        initial -> A[label="From initial to A"];
        initial -> B[label="From initial to B"];
        A -> C[label="From A to C"];
        B -> D[label="From B,C to D"];
        C -> D[label="From B,C to D"];
        C -> Finish[label="From C,D to Finish"];
        D -> Finish[label="From C,D to Finish"];
}

Visualization:

Workflow visualization