Trubo Ecto

Build Status

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

def deps do
[
{:trubo_ecto, "~> 0.1.0"}
]
end
config :trubo_ecto, Trubo.Ecto,
repo: MyApp.Repo,
per_page: 10
use Ttrubo.Ecto, repo: MyApp.Repo, per_page: 10

Examples

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:

More example pls move: docs

Search Matchers

List of all possible predicates

Predicate Description Finish Note
*_eq equal Y
*_not_eq not equal N
*_lt less than N
*_lteq less than or equal Y
*_gt greater than N
*_gteq greater than or equal N
*_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 = '')
*_null is null N
*_not_null is not null N
*_in match any values in array N e.g. q[name_in][]=Alice&q[name_in][]=Bob
*_start_with Starts with N SQL: col LIKE 'value%'
*_not_start_with Does not start with N
*_end_with Ends with N
*_not_end_with Does not end with N
*_like Contains value Y uses LIKE
*_ilike Contains any of N
*_true is true N
*_false is false N
*_between begin < between < end N

Features

Credits