README.md

# Qh

Easy Rails-style query helper for iex. 

```elixir
use Qh

Qh.configure(app: :my_app)

q User.where(age > 20).limit(10).all
[%MyApp.User{age: 22, name: "Bob"}, ...]
```

## Installation

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

```elixir
def deps do
  [
    {:qh, "~> 0.1"}
  ]
end
```

Add to your `.iex.exs`:

```elixir
use Qh

Qh.configure(app: :my_app)
```

Make sure to change `:my_app` to your otp app name that holds the schema's and repo's.

## Usage

### Query examples

```elixir
q User.first
q User.order(name).last(3)
q User.order(name: :asc, age: :desc).last
q User.order("lower(?)", name).last
q User.where(age > 20 and age <= 30).count
q User.where(age > 20 and age <= 30).limit(10).all
q User.where(age > 20 or name == "Bob").all
q User.where(age > 20 and (name == "Bob" or name == "Anna")).all
q User.where(age: 20, name: "Bob").count
q User.where("nicknames && ?", ["Bobby", "Bobi"]).count
q User.where("? = ANY(?)", age, [20, 30, 40]).count
q User.find(21)
q User.find_by(name: "Bob Foo")
q User.find_by(name == "Bob" or name == "Anna")
```

### Modifying records
```elixir
# new
user = q User.new(name: "Alice")
{:ok, user} = Qh.save(user)

# update via save
user = q User.first
{:ok, user} = Qh.save(%{user | name: "Bob"})

# update
user = q User.find(21)
{:ok, user} = Qh.update(user, age: 50)

# delete
user = q User.find(21)
Qh.delete!(user)
```

## Configuration

 - `app`: App name that is used for infering the schema namespace and repo
 - `app_mod`: You can also set the app module directly, instead of the app name
 - `repo`: Set the repo module directly, in case of a non-default repo

Set via config:

```elixir
config :qh, app: :my_app, repo: MyApp.AlternateRepo
```

Set via configure:

```elixir
Qh.configure(app: :my_app, repo: MyApp.AlternateRepo)
```

Pass in options:

```elixir
user = q(User.find(21), app: :my_app, repo: MyApp.AlternateRepo)
```