Ectoo
Ecto is powerful, but a relatively low-level abstraction in some respects. Not all simple things are easy to do.
This library aims to remedy that by building some convenient abstractions on top of Ecto.
Counting all records with Ecto:
require Ecto.Query
MyRepo.one(Ecto.Query.from m in MyModel, select: count(m.id))
Counting all records with Ectoo:
MyRepo |> Ectoo.count(MyModel)
Ectoo does not aim to replace Ecto. Use Ectoo when you have simple needs, and Ecto for the rest.
If you want a query that is not executed immediately, just skip the repo:
Ectoo.count(MyModel)
You can use a more complex query instead of MyModel:
query = Ecto.Query.from m in MyModel, where: id > 5
Ectoo.count(query)
Ectoo currently includes these functions:
Ectoo.count(MyModel)
Ectoo.max(MyModel, :age)
Ectoo.min(MyModel, :age)
Ectoo.avg(MyModel, :age)
Ectoo.sum(MyModel, :age)
Each of these can optionally take a repo as the first argument, to execute the query immediately.
Installation
Add Ectoo to your list of dependencies in mix.exs:
def deps do
[
{:ectoo, "> 0.0.0"},
]
end
Ensure Ectoo is started before your application:
def application do
[applications: [
:ectoo,
]]
end
Development
You must have Postgres installed to run the tests. If the Postgres user does not share your username, you can set the ECTOO_DB_USER environment variable.
Install the deps:
mix deps.get
Create the test DB:
MIX_ENV=test mix test.setup
Run the tests:
mix test
If you need to drop the test DB and set it up anew, do:
MIX_ENV=test mix test.reset
TODO
- Hex docs
- Handle composite primary keys?
- Moar?
Credits and license
By Henrik Nyh 2015-11-21 under the MIT license.