EctoAutoFilter (Ecto Auto Filter v0.1.1) View Source
Ecto Auto Filter Automatic Filters based Ecto Schemas
EctoAutoFilter is a helper for projects that use Ecto Schemas and segregate the queries in entity repository modules.
EctoAutoFilter inject the filter/3
function that by default has a pattern matching for each field of declared entity.
Link to this section Summary
Functions
Injeta a função filter/3
e as funções privadas responsáveis pelo filtro customizado a partir do schema
base passado
Adiciona um filtro customizado e componivel aos demais filtros do módulo base em tempo de compilação.
Link to this section Functions
Injeta a função filter/3
e as funções privadas responsáveis pelo filtro customizado a partir do schema
base passado
Injects the filter/3
functions and the privated functions responsible for custom filters from base entity schema's passed.
Options:
schema
: This options is required and is necessary for EctoAutoFilter build the queries.repo
: This options is optional and is used to execute the queries, and when is passed such asuse
option, overrides the global config for the current module.
Exemple:
defmodule MyApp.User do
use Ecto.Schema
schema "users" do
field(:name, :string)
field(:email, :string)
field(:age, :integer)
end
...
end
defmodule UserRepository do
use EctoAutoFilter,
repo: MyApp.Repo,
schema: MyApp.User
end
After that entity repository module is declared the filter functions can already be used like a below example:
Depois de declarado o using no módulo de repositório as funções de filtro podem ser usadas como no exemplo a seguir:
iex> user_one = Repo.insert!(%User{name: "John Doe", email: "john@doe.com", age: 30})
iex> user_two = Repo.insert!(%User{name: "Jane Doe", email: "jane@doe.com", age: 28})
iex> UserRepository.filter(%{age: {30, ">="}})
%User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
age: 30,
email: "john@doe.com",
id: 1,
name: "John Doe"
}
Adiciona um filtro customizado e componivel aos demais filtros do módulo base em tempo de compilação.
- query: é queryable que a função irá receber;
- value: é o valor que será recebido para compor o filtro e pode ser manipulado por pattern matching;
- key: indentify the created filter in
filter/3
function.
Este filtro é adicionado as demais regras de filtro e se torna disponível na forma de filter/3
,
por exemplo:
defmodule MyApp.User do
use Ecto.Schema
schema "users" do
field(:name, :string)
field(:email, :string)
field(:age, :integer)
field(:bith_date, :date)
end
...
end
defmodule UserRepository do
use EctoAutoFilter,
repo: MyApp.Repo,
schema: MyApp.User
add_filter query, value, :birth_years_ago do
x_years_ago = (365 * value)
limit_date = Date.utc_today() |> Date.add(-x_years_ago)
where(query, [r], r.birth_date == ^limit_date)
end
end
Depois de declarado o filtro customizado ele pode ser usado conforme o exemplo a seguir:
iex> user_one = Repo.insert!(%User{name: "John Doe", email: "john@doe.com", age: 30, birth_date: 1991-01-01})
iex> user_two = Repo.insert!(%User{name: "Jane Doe", email: "jane@doe.com", age: 28, birth_date: 1993-01-01})
iex> UserRepository.filter(%{birth_years_ago: 28})
%User{
__meta__: #Ecto.Schema.Metadata<:loaded, "users">,
age: 28,
email: "jane@doe.com",
id: 2,
name: "Jane Doe"
}