README.md

<h1>
<img width="400" src="/logos/ectofactory_logo_text.png"/>
</h1>
<img src="https://travis-ci.org/mrmicahcooper/ecto_factory.svg?branch=master" alt="Build Status">


Easily generate structs based on your ecto schemas.

[Hex docs homepage](https://hexdocs.pm/ecto_factory/api-reference.html)

## Installation

Add ecto_factory to your list of dependencies in `mix.exs`:

```elixir
def deps do
  [{:ecto_factory, "~> 0.0.5"}]
end
```

Configure your `repo` for EctoFactory:

Using the following `MyApp.User` module:

```elixir
defmodule MyApp.User do
  use Ecto.Schema

  schema "users" do
    field :age, :integer
    field :username, :string
    field :date_of_birth, Ecto.DateTime
  end
end

```

Configure ecto_factory factories and the `repo` to be used for inserting:

```elixir
# config/config.exs

config :ecto_factory, repo: MyApp.Repo
config :ecto_factory, factories: [
  user: MyApp.User,

  user_with_defaults: { MyApp.User, [
    age: 99,
    username: "mrmicahcooper",
    date_of_birth: Ecto.DateTime.cast!("2012-12-12"),
  ] }
]
```

And that's it. Now use `EctoFactory.build` to create structs.

```elixir
EctoFactory.build(:user) 
#=> %MyApp.User{age: 1, username: "username, date_of_birth: #Ecto.DateTime<2016-06-14T17:03:22Z>}

EctoFactory.build(:user, username: "hashrocket")
#=> %MyApp.User{age: 1, username: "hashrocket, date_of_birth: #Ecto.DateTime<2016-06-14T17:03:22Z>}

EctoFactory.build(:user_with_defaults)
#=> %MyApp.User{age: 99, username: "mrmicahcooper, date_of_birth: #Ecto.DateTime<2012-12-12T00:00:00Z>}

```

EctoFactory uses the fields you've defined in your schema to create some basic data that can be easily overwritten with a very small amount of configuration.

### Development

```
$ git clone https://github.com/mrmicahcooper/ecto_factory
$ cd ecto_factory
$ mix deps.get
$ mix test
```