ecto_as_state_machine v1.0.7
EctoAsStateMachine.Helpers
View Source
## Example model:
defmodule User do
use Web, :model
use EctoAsStateMachine
easm column: :state,
initial: :unconfirmed,
states: [:unconfirmed, :confirmed, :blocked, :admin],
events: [
[
name: :confirm,
from: [:unconfirmed],
to: :confirmed,
callback: fn(model) ->
# yeah you can bring your own code to these function.
Ecto.Changeset.change(model, confirmed_at: DateTime.utc_now |> DateTime.to_naive)
end
], [
name: :block,
from: [:confirmed, :admin],
to: :blocked
], [
name: :make_admin,
from: [:confirmed],
to: :admin
]
]
schema "users" do
field :state, :string
end
end
Examples
user = Repo.get_by(User, id: 1)
#=> %User{}
new_user_changeset = User.confirm(user)
#=> %{changes: %{state: "confirmed"}}
Repo.update(new_user_changeset)
#=> true
new_user = User.confirm!(user)
#=> Or auto-transition user state to "confirmed". We can make him admin!
User.confirmed?(new_user)
#=> true
User.admin?(new_user)
#=> false
User.can_confirm?(new_user)
#=> false
User.can_make_admin?(new_user)
#=> true
new_user = User.make_admin!(new_user)
User.admin?(new_user)
#=> true