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.3"}
  ]
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 | (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