View Source Torch.Helpers (Torch v5.4.0)

Provides helper functions for Torch-generated controllers.

Summary

Functions

Takes the controller action name and appends it to the torch- prefix.

Determines how the query for an index action should be sorted.

Removes any "un-set" boolean parameters from the filter params list.

Types

@type params() :: map()

Functions

Link to this function

body_classes(conn)

View Source (since 5.0.0)
@spec body_classes(Plug.Conn.t()) :: String.t()

Takes the controller action name and appends it to the torch- prefix.

Example

iex> body_classes(%Plug.Conn{private: %{phoenix_action: :create}})
"torch-create"

iex> body_classes(%Plug.Conn{private: %{phoenix_action: :custom_action}})
"torch-custom-action"
Link to this function

paginate(query, repo, params, settings \\ [page_size: 10])

View Source

Paginates a given Ecto.Queryable using Scrivener.

This is a very thin wrapper around Scrivener.paginate/2, so see the Scrivener Ecto documentation for more details.

Parameters

  • query: An Ecto.Queryable to paginate.
  • repo: Your Repo module.
  • params: Parameters from your conn. For example %{"page" => 1}.
  • settings: A list of settings for Scrivener, including :page_size.

Examples

paginate(query, Repo, params, [page_size: 15])
# => %Scrivener.Page{...}
@spec sort(params()) :: {atom(), atom()} | {:asc, :id}

Determines how the query for an index action should be sorted.

Relies on the "sort_field" and "sort_direction" parameters to be passed. By default, it sorts by :id in ascending order.

Examples

iex> sort(%{"sort_field" => "name", "sort_direction" => "desc"})
{:desc, :name}

iex> sort(%{})
{:asc, :id}

In a query pipeline, use in conjunction with Ecto.Query.order_by/3:

order_by(query, ^sort(params))
Link to this function

strip_unset_booleans(params, schema_name, bool_fields)

View Source
@spec strip_unset_booleans(params(), binary(), [atom()]) :: params()

Removes any "un-set" boolean parameters from the filter params list.

Due to the nature of boolean params (on/off) it becomes hard to include the "filter on true" and "filter on false" states while also including a third option of "don't filter at all" on this boolean argument. Since the parameter is always sent in the filter form (due to the checkbox).

We need a way to encode 3 states for a boolean field (on, off, any|ignore).

This function takes a list of boolean field names, and will remove from the params argument, any matching boolean fields whose current value is set to "any" (which is the default placeholder Torch UI uses to signify this third boolean state).

Examples

iex> strip_unset_booleans(%{}, "post", [])
%{}

iex> strip_unset_booleans(%{"post" => %{"title_contains" => "foo"}}, "post", [])
%{"post" => %{"title_contains" => "foo"}}

iex> strip_unset_booleans(%{"post" => %{"title_contains" => "foo"}}, "post", [:title])
%{"post" => %{"title_contains" => "foo"}}

iex> strip_unset_booleans(%{"post" => %{"title_equals" => "true"}}, "post", [:title])
%{"post" => %{"title_equals" => "true"}}

iex> strip_unset_booleans(%{"post" => %{"title_equals" => "any"}}, "post", [:title])
%{"post" => %{}}

iex> strip_unset_booleans(%{"post" => %{"name_contains" => "foo", "title_equals" => "any"}}, "post", [:title])
%{"post" => %{"name_contains" => "foo"}}

iex> strip_unset_booleans(%{"post" => %{"name_equals" => "any", "title_equals" => "any"}}, "post", [:title, :name])
%{"post" => %{}}

iex> strip_unset_booleans(%{"post" => %{"name_equals" => "any", "title_equals" => "any", "surname_equals" => "bar"}}, "post", [:title, :name])
%{"post" => %{"surname_equals" => "bar"}}