EctoFilter v0.2.0 EctoFilter.Operators.Comparison behaviour View Source
Comparison operators.
Examples:
With "equal" condition
iex> Repo.insert!(%User{email: "bob@example.com"})
iex> Repo.insert!(%User{email: "alice@example.com"})
iex> result =
...> User
...> |> EctoFilter.filter([{:email, :equal, "alice@example.com"}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).email
"alice@example.com"
Comparison with nil
are supported:
iex> Repo.insert!(%User{email: "bob@example.com"})
iex> Repo.insert!(%User{email: nil})
iex> result =
...> User
...> |> EctoFilter.filter([{:email, :equal, nil}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).email
nil
With "not equal" condition
iex> Repo.insert!(%User{email: "bob@example.com"})
iex> Repo.insert!(%User{email: "alice@example.com"})
iex> result =
...> User
...> |> EctoFilter.filter([{:email, :not_equal, "alice@example.com"}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).email
"bob@example.com"
Comparison with nil
are also supported:
iex> Repo.insert!(%User{email: "bob@example.com"})
iex> Repo.insert!(%User{email: nil})
iex> result =
...> User
...> |> EctoFilter.filter([{:email, :not_equal, nil}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).email
"bob@example.com"
With "less than or equal" condition
iex> Repo.insert!(%User{age: 17})
iex> Repo.insert!(%User{age: 18})
iex> result =
...> User
...> |> EctoFilter.filter([{:age, :less_than_or_equal, 17}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).age
17
With "greater than or equal" condition
iex> Repo.insert!(%User{age: 17})
iex> Repo.insert!(%User{age: 18})
iex> result =
...> User
...> |> EctoFilter.filter([{:age, :greater_than_or_equal, 18}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).age
18
With "less than" condition
iex> Repo.insert!(%User{age: 17})
iex> Repo.insert!(%User{age: 21})
iex> result =
...> User
...> |> EctoFilter.filter([{:age, :less_than, 20}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).age
17
With "greater than" condition
iex> Repo.insert!(%User{age: 17})
iex> Repo.insert!(%User{age: 21})
iex> result =
...> User
...> |> EctoFilter.filter([{:age, :greater_than, 18}])
...> |> Repo.all()
iex> length(result)
1
iex> hd(result).age
21
Link to this section Summary
Link to this section Types
Link to this type
condition() View Source
Link to this type
rule()
View Source
rule()
View Source
rule() ::
:equal
| :not_equal
| :less_than_or_equal
| :greater_than_or_equal
| :less_than
| :greater_than
rule() :: :equal | :not_equal | :less_than_or_equal | :greater_than_or_equal | :less_than | :greater_than
Link to this section Callbacks
Link to this callback
apply(query, condition, type, context)
View Source
apply(query, condition, type, context)
View Source
apply(
query :: Ecto.Query.t(),
condition :: condition(),
type :: EctoFilter.field_type(),
context :: Ecto.Queriable.t()
) :: Ecto.Query.t()
apply( query :: Ecto.Query.t(), condition :: condition(), type :: EctoFilter.field_type(), context :: Ecto.Queriable.t() ) :: Ecto.Query.t()