Rummage.Ecto v2.0.0 Rummage.Ecto.Schema.Search View Source

Usage:

defmodule MyApp.Rummage.MyModel.Search do
  use Rummage.Schema.Search,
    handlers: [
      category_name: %{search_field: :name, search_type: :ilike, assoc: [inner: :category]},
      price_gteq: %{search_field: :price, search_type: :gteq},
      price_lteq: %{search_field: :price, search_type: :lteq},
      name: %{search_type: :ilike},
      month: :integer,
      year: :integer,
    ]

  # Skip blank searches
  def search(query, name, nil), do: query
  def search(query, name, ""), do: query

  def search(query, :month, month) do
    from p in query,
      where: fragment("date_part('month', ?)", p.inserted_at) == ^month
  end

  def search(query, :year, year) do
    from p in query,
      where: fragment("date_part('year', ?)", p.inserted_at) == ^year
  end

  # Because we're overriding search we need to call super...
  def search(query, name, value) do
    super(query, name, value)
  end
end