README.md

# Statex

[<img src="https://travis-ci.com/RstorLabs/statex.svg?branch=master">](https://travis-ci.com/RstorLabs/statex)

**General State Machine for Elixir**

Using Statex is easy, you just have to define a `@state_graph`.

```elixir

  defmodule LightSwitch do
    use Statex

    @state_graph off: [flip: :on],
                 on:  [flip: :off]

  end

  iex> {:ok, pid} = LightSwitch.start_link()
  ...
  iex> LightSwitch.state(pid)
  :off
  iex> LightSwitch.flip(pid)
  :ok
  iex> LightSwitch.state(pid)
  :on
  iex> LightSwitch.flip(pid)
  :ok
  iex> LightSwitch.state(pid)
  :off
```

## Installation

The package can be installed by adding `Statex` to your list of dependencies
in `mix.exs`:

```elixir
def deps do
  [
    {:statex, github: "RstorLabs/statex"}
  ]
end
```