Turbo Ecto

Build StatusCoverage 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.7"}
  ]
end
config :turbo_ecto, Turbo.Ecto,
  repo: MyApp.Repo,
  per_page: 10

Examples


  iex> params = %{"q" => %{"name_and_category.name_like" => "elixir"}, "s" => "inserted_at+asc", "per_page" => 20}

  iex> Turbo.Ecto.turboq(Turbo.Ecto.Product, params)
  #Ecto.Query<from p in Turbo.Ecto.Product, join: c in assoc(p, :category),
  where: like(p.name, "%elixir%") and like(c.name, "%elixir%"),
  order_by: [asc: p.inserted_at], limit: 20, offset: 0>

  iex> Turbo.Ecto.turbo(Turbo.Ecto.Product, params)
  %{
    datas: [%Product{}],
    paginate: %{
      current_page: 10,
      next_page: 11,
      per_page: 20,
      prev_page: 9,
      total_count: 100,
      total_pages: 20
    }
  }

More example pls move: docs

Search Matchers

List of all possible search_types

| Predicate | Description | Finish | Note | ————- | ————- |——– |——– | | *_eq | equal | Y | (SQL: col = 'value') | | *_not_eq | not equal | Y | (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 | Y | Only compatible with string columns. Example: q[name_present]=1 (SQL: col is not null AND col != '') | | *_null | is null true or false | Y | (SQL: col is null or col is not null) | | *_in | match any values in array | Y | e.g. q[name_in][]=Alice&q[name_in][]=Bob (SQL: name in ('Alice', 'Bob'))| | *_like | Contains value | Y | (SQL: col LIKE '%value%') | | *_ilike | Contains any of | Y | (SQL: col ILIKE '%value%') | | *_true | is true or false | Y | (SQL: col is true or col is false) | | *_between| begin < between < end | Y | e.g. q[price_between][]=100&q[price_between][]=200 (SQL: 100 <= price <= 200) |

Credits