Turbo Ecto

Build Status

Turbo is a very rich ecto component,including search sort and paginate. Inspiration by ruby ransack and learn from rummage_ecto

Phoenix support turbo_html, check this repos.

Table of contents

Getting started

def deps do
[
{:turbo_ecto, "~> 0.1.6"}
]
end
config :turbo_ecto, Turbo.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> Turbo.Ecto.turboq(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> Turbo.Ecto.turbo(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 (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

Credits