Current section
Files
Jump to
Current section
Files
lib/itaco.ex
defmodule Itaco do
defmacro __using__(opts) do
quote do
alias unquote(opts[:repo])
import Ecto.Query
def all do
unquote(opts[:schema])
|> Repo.all()
end
def find(id) do
unquote(opts[:schema])
|> Repo.get!(id)
end
def find_by(conds) do
unquote(opts[:schema])
|> Repo.get_by(conds)
end
def where(conds) do
from(unquote(opts[:schema]), where: ^conds)
|> Repo.all()
end
def insert(attr) do
%unquote(opts[:schema]){}
|> unquote(opts[:schema]).changeset(attr)
|> Repo.insert()
end
def insert!(attr) do
%unquote(opts[:schema]){}
|> unquote(opts[:schema]).changeset(attr)
|> Repo.insert!()
end
def insert_all(maps, opts \\ []) do
now = DateTime.utc_now() |> NaiveDateTime.truncate(:second)
changesets =
maps
|> Enum.map(fn map -> Map.merge(%{inserted_at: now, updated_at: now}, map) end)
Repo.insert_all(unquote(opts[:schema]), changesets, opts)
end
def update(entity, attr) do
entity
|> unquote(opts[:schema]).changeset(attr)
|> Repo.update()
end
def update!(entity, attr) do
entity
|> unquote(opts[:schema]).changeset(attr)
|> Repo.update!()
end
def delete(entity), do: Repo.delete(entity)
def delete!(entity), do: Repo.delete!(entity)
def delete_all(), do: Repo.delete_all(unquote(opts[:schema]))
end
end
end