README.md

# Extruder

Extruder let you build and validate structs from any source.

## Installation

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

    def deps do
      [{:extruder, "~> 0.0.1"}]
    end


## Usage
### Describe your model
    defmodule TestModel do
      use Extruder

      defmodel do
        field :foo, :int
        field :bar, :int, default: 1
        field :bool_def, :boolean
        field :def_str, :string
        field :text, :string, default: "foo bar wadus"
        field :list_def, :list
        field :map_def, :map, default: %{foo: []}
        field :some_atom, :atom
        field :neested_struct, :struct, module: MyApp.NeestedStruct
        field :neested_struct_list, :structs_list, module: MyApp.NeestedStruct
        field :date, :datetime

        validates_presence_of :foo
      end
    end
### Create structs from any source

    iex> TestModel.extrude %{"foo" => 1}
    {:ok,
     %TestModel{bar: 1, bool_def: false, def_str: nil, foo: 1, list_def: [],
      map_def: %{foo: []}, neested_struct: nil, neested_struct_list: nil,
      some_atom: nil, text: "foo bar wadus"}}

    iex> TestModel.extrude %{"bar" => 2}
    {:error,
     %TestModel{bar: 2, bool_def: false, def_str: nil, foo: nil, list_def: [],
      map_def: %{foo: []}, neested_struct: nil, neested_struct_list: nil,
      some_atom: nil, text: "foo bar wadus"}, [foo: [:can_not_be_nil]]}