Trubo Ecto
Trubo is a very rich ecto component,including search sort and paginate. Inspiration by ruby ransack and learn from rummage_ecto
Table of contents
Getting started
-
The package can be installed by adding
trubo_ectoto your list of dependencies inmix.exs:
def deps do
[
{:trubo_ecto, "~> 0.1.3"}
]
end-
Add the Repo of your app and the desired per_page to the
trubo_ectoconfiguration in config.exs:
config :trubo_ecto, Trubo.Ecto,
repo: MyApp.Repo,
per_page: 10-
Or add the
trubo_ectowith elixiruse
use Ttrubo.Ecto, repo: MyApp.Repo, per_page: 10Examples
iex> params = %{
"q" => %{"title_like" => "hello123", "category_id_eq" => 1},
"s" => "inserted_at+asc",
"per_page" => 5, "page" => 10
}
iex> Trubo.Ecto.truboq(Product, params)
#Ecto.Query<from t in Product, where: t.type == ^1,
where: like(t.title, ^"%hello123%"),
order_by: [asc: t.inserted_at],
limit: ^5, offset: ^45>
iex> Trubo.Ecto.trubo(Product, params)
%{
datas: [Product.t()],
paginate: %{
current_page: 10,
next_page: 11,
per_page: 5,
prev_page: 9,
total_count: 100,
total_pages: 20
}
}
Also supports:
-
Use
Trubo.Ecto.searchonly returns searchresultor useTrubo.Ecto.searchqreturns searchqueryable; -
Use
Trubo.Ecto.sortonly returns sortresultor useTrubo.Ecto.sortqreturns sortqueryable; -
Use
Trubo.Ecto.paginatereturns pagianteresultor useTrubo.Ecto.paginateqreturns paginatequeryable.
More example pls move: docs
Search Matchers
List of all possible predicates
| Predicate | Description | Finish | Note
| ------------- | ------------- |-------- |-------- |
| *_eq | equal | Y | (SQL: col = 'value') |
| *_not_eq | not equal | N | (SQL: col != 'value') |
| *_lt | less than | Y | (SQL: col < 1024) |
| *_lteq | less than or equal | Y | (SQL: col <= 1024) |
| *_gt | greater than | Y | (SQL: col > 1024) |
| *_gteq | greater than or equal | Y | greater than or equal. (SQL: col >= 1024) |
| *_present | not null and not empty | N | Only compatible with string columns. Example: q[name_present]=1 (SQL: col is not null AND col != '') |
| *_blank | is null or empty. | N | (SQL: col is null OR col = '') |
| *_is_null | is null true or false | N | (SQL: col is null or col is not null) |
| *_in | match any values in array | N | e.g. q[name_in][]=Alice&q[name_in][]=Bob (SQL: name in ('Alice', 'Bob'))|
| *_start_with | Starts with | N | (SQL: col LIKE 'value%') |
| *_not_start_with | Does not start with | N | |
| *_end_with | Ends with | N | (SQL: col LIKE '%value')|
| *_not_end_with | Does not end with | N | |
| *_like | Contains value | Y | (SQL: col LIKE '%value%') |
| *_ilike | Contains any of | Y | (SQL: col ILIKE '%value%') |
| *_is_true | is true or false | N | (SQL: col is true or col is false) |
| *_between| begin < between < end | N | e.g. q[price_between][]=100&q[price_between][]=200 (SQL: 100 <= price <= 200) |
Features
- Example website.
- Add the necessary code test.
-
Support
andandorsymbol. Example: e.g.q[title_or_body_like]=hello123, SQL:title LIKE 'hello123' or body LIKE 'hello123' -
Support multi table assoc search. Example: e.g.
q[category_name_like]=cate1. -
Support multi table assoc sort. Example: e.g.
s=category_updated_at+desc
Credits
- ecto - Very great API.
- ransack - Initial inspiration of this project.
- rummage_ecto - Similar implementation.