Flexflow

ci Hex.pm Hex.pm Documentation Last Updated

Usage

defmodule Review do
  @moduledoc false

  defmodule Draft do
    use Flexflow.Node
  end

  defmodule Inreview do
    use Flexflow.Node
  end

  defmodule Reviewed do
    use Flexflow.Node
  end

  defmodule Rejected do
    use Flexflow.Node
  end

  defmodule Canceled do
    use Flexflow.Node
  end

  defmodule Submit do
    use Flexflow.Transition
  end

  defmodule Agree do
    use Flexflow.Transition
  end

  defmodule Modify do
    use Flexflow.Transition
  end

  defmodule Reject do
    use Flexflow.Transition
  end

  defmodule Cancel do
    use Flexflow.Transition
  end

  use Flexflow.Process, version: 1

  ## Define a start node
  start_node Draft
  ## Define an end node with custom name
  end_node {Reviewed, "Already reviewed"}
  end_node Canceled
  ## Define an intermediate node
  intermediate_node Inreview
  intermediate_node Rejected

  ## Define a transition
  ## `a ~> b` is a shortcut of `{a, b}`
  transition Submit, Draft ~> Inreview
  transition Modify, Draft ~> Draft
  transition Cancel, Draft ~> Canceled

  ## Define a transition with custom name
  transition {Submit, "Submit rejected"}, Rejected ~> Inreview
  transition Modify, Rejected ~> Rejected
  transition Cancel, Rejected ~> Canceled

  ## Define a transition
  transition Reject, Inreview ~> Rejected
  transition Agree, Inreview ~> {Reviewed, "Already reviewed"}
end

Graphviz Dot

<summary><img src="https://g.gravizo.com/source/custom_mark10?https%3A%2F%2Fraw.githubusercontent.com%2Fclszzyh%2Fflexflow%2Fmaster%2FREADME.md"></summary>```dot// custom_mark10digraph review { size ="4,4"; draft [label="draft",shape=doublecircle,color=".7 .3 1.0"]; Already_reviewed [label="Already reviewed",shape=circle,color=red]; canceled [label="canceled",shape=circle,color=red]; inreview [label="inreview",shape=box]; rejected [label="rejected",shape=box]; draft -> inreview [label="submit"]; draft -> draft [label="modify",color=blue]; draft -> canceled [label="cancel"]; rejected -> inreview [label="submit"]; rejected -> rejected [label="modify",color=blue]; rejected -> canceled [label="cancel"]; inreview -> rejected [label="reject"]; inreview -> Already_reviewed [label="agree"];}// custom_mark10```

See Also