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

Link to this section Summary

Link to this section Functions

Link to this macro easm(opts) View Source (macro)
easm([repo: Ecto.Repo, initial: String.t, column: atom, events: List.t, states: List.t]) :: term