README.md

# Eno

[![Build Status][travis-image]][travis-url]

Lightweight SQL toolkit for elixir inspired by [yesql](https://github.com/krisajenkins/yesql) and [ragtime](https://github.com/weavejester/ragtime).

For the moment only PostgreSQL is supported, and you need to add [postgrex](http://github.com/ericmj/postgrex) as a dependency.

## Installation

It's [available in Hex](https://hex.pm/docs/publish), the package can be installed as:

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

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

## Usage

lib/yourapp/repo.ex

    defmodule YourApp.Repo do
      use Eno
    end

lib/yourapp/repo.sql

    -- name: user_list
    select * from users offset :offset limit :limit;

    -- name: user_get
    select * from users where user_id = :id;

lib/yourapp.ex

    children = [
      worker(YourApp.Repo, []),
    ]

config/config.ex

    config :eno, YourApp.Repo,
      adapter: Eno.Adapters.Postgres,
      hostname: "localhost",
      username: "user",
      password: "pass",
      database: "db"

finally

    iex> YourApp.Repo.user_list offset: 0, limit: 10

    iex> YourApp.Repo.user_get 1

## Migration

    $ mix eno.gen.migration init_users

priv/migrations/repo/20160507022535_init_users.up.sql

    create table users (id SERIAL PRIMARY KEY, name varchar(255) NOT NULL UNIQUE);

priv/migrations/repo/20160507022535_init_users.down.sql

    drop table users;

config/config.ex

    config :yourapp,
      eno_repos: [YourApp.Repo]

up

    $ mix eno.migrate [-r YourApp.Repo]

down

    $ mix eno.rollback [-r YourApp.Repo]

## Status

Not ready for production use yet. The API is subject to change.


[travis-image]: https://img.shields.io/travis/zweifisch/eno.svg?style=flat
[travis-url]: https://travis-ci.org/zweifisch/eno