Rummage.Ecto v2.0.0 Rummage.Ecto.Hook behaviour View Source

This module defines a behaviour that Rummage.Ecto.Hooks have to follow.

This module also defines a __using__ macro which mandates certain behaviours for a Hook module to follow.

Native hooks that come with Rummage.Ecto follow this behaviour.

Custom Search, Sort and Paginate hooks should follow this behaviour as well, in order for them to work well with Rummage.Ecto

Usage

  • This is the preferred way of creating a Custom Hook. Using Rummage.Ecto.Hook.__using__/1 macro, it can be ensured that run/2 and format_params/2 functions have been implemented.
defmodule MyCustomHook do
  use Rummage.Ecto.Hook

  def run(queryable, params), do: queryable

  def format_params(querable, params, opts), do: params
end
defmodule MyCustomHook do
  @behviour Rummage.Ecto.Hook

  def run(queryable, params), do: queryable

  def format_params(querable, params, opts), do: params
end

Link to this section Summary

Functions

This macro allows us to write rummage hooks in an easier way. This includes a @behaviour module attribute and defines raisable callback implementations for the hook using this module. It also makes run/2 and format_params/3 overridable and expects them to be defined in the hook.

Callbacks

All callback invoked by Rummage.Ecto which applies a set of translations to params passed to the hook. This is responsible for making sure that the params passed to the hook's run/2 function are santized.

All callback invoked by Rummage.Ecto which applies a set of translations to an ecto query, based on operations defined in the hook.

Link to this section Functions

Link to this macro

__using__(opts)

View Source (macro)

This macro allows us to write rummage hooks in an easier way. This includes a @behaviour module attribute and defines raisable callback implementations for the hook using this module. It also makes run/2 and format_params/3 overridable and expects them to be defined in the hook.

Usage:

defmodule MyHook do
  use Rummage.Ecto.Hook

  def run(queryable, params), do: "do something"

  def format_params(q, params, opts), do: "do something"
end

For a better example, check out Rummage.Ecto.Hook.Paginate or any other hooks defined in Rummage.Ecto

Link to this function

resolve_field(field, queryable)

View Source

Link to this section Callbacks

Link to this callback

format_params(arg1, map, keyword)

View Source

Specs

format_params(Ecto.Query.t(), map(), keyword()) :: map()

All callback invoked by Rummage.Ecto which applies a set of translations to params passed to the hook. This is responsible for making sure that the params passed to the hook's run/2 function are santized.

Specs

run(Ecto.Query.t(), map()) :: Ecto.Query.t()

All callback invoked by Rummage.Ecto which applies a set of translations to an ecto query, based on operations defined in the hook.