README.md

# EctoPostgresEnum

Library which simplifies using `PostgreSQL` enums

## Installation

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

```elixir
def deps do
  [
    {:ecto_postgres_enum, "~> 1.0"}
  ]
end
```

## Usage

To define enum simply use `EctoPostgresEnum` module like:

```elixir
defmodule MyEnum do
  values = [:my, :enum]
  use EctoPostgresEnum, values: values
end

# automatically generated type
MyEnum.type() == :my_enum
```

You can optionally define `schema` and `type`:

```elixir
defmodule MyEnum do
  values = [:my, :enum]
  use EctoPostgresEnum, schema: :my_schema, type: :my_type, values: values
end
```

For more informations please take a look at `EctoPostgresEnum` module.

After it add such enum to your schema like:

```elixir
defmodule MySchema do
  use Ecto.Schema

  alias Ecto.Changeset

  schema "my_table" do
    field :my_field, MyEnum # add this
  end

  def changeset(my_element, my_params) do
    Changeset.cast(my_element, my_params, [:my_field]) # cast as any other field
  end
end
```

Finally you will also need to create migration like:

```elixir
defmodule Example.Repo.Migrations.MyEnum do
  use Ecto.Migration

  def up do
    MyEnum.create_db_enum()

    alter table(:my_table) do
      add :my_field, :my_enum # when automatically generated
      # or
      add :my_field, :my_type # when manually set
    end
  end

  def down do
    # Remember to remove all fields which are using your enum.
    # Otherwise migration would fail!
    alter table(:my_table) do
      remove :my_field
    end

    MyEnum.drop_db_enum()
  end
end
```