Popularity
1.8
Stable
Activity
0.0
Stable
9
2
0

Monthly Downloads: 32
Programming language: Elixir
License: MIT License
Tags: DSL     Ecto     State Machines     DB    

state_mc alternatives and similar packages

Based on the "State Machines" category.
Alternatively, view state_mc alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of state_mc or a related project?

Add another 'State Machines' Package

README

State Machine for Ecto

State machine pattern in Ecto.

Installation

The package can be installed as:

  1. Add state_mc to your list of dependencies in mix.exs:

    def deps do
      [{:state_mc, "~> 0.1.0"}]
    end
    

How to use?

Example:

defmodule Example.User do
  use Example.Web, :model

  import StateMc.EctoSm

  schema "users" do
    field :state, :string, default: "waiting"
  end

  statemc :state do
    defstate [:waiting, :approved, :rejected]
    defevent :approve, %{from: [:waiting, :rejected], to: :approved}, fn(changeset) ->
      changeset
      |> Example.Repo.update()
    end
    defevent :reject, %{from: [:waiting, :approved], to: :rejected}, fn(changeset) ->
      changeset
      |> Example.Repo.update()
    end
  end
end

How to run?

user = Example.Repo.get(Example.User, 1)
Example.User.current_state(user) # => get current state
Example.User.can_approve?(user)  # => check event approve
Example.User.can_reject?(user)   # => check event reject
Example.User.approve(user)       # => call event approve to change state to approved
Example.User.reject(user)        # => call event reject to change state to rejected