improvement: to_filter -> to_filter_expression

This commit is contained in:
Zach Daniel 2021-12-02 16:41:04 -05:00
parent cc71c29e46
commit 332046e824

View file

@ -113,18 +113,18 @@ defmodule AshPhoenix.FilterForm do
To add this to a query, remember to use `^`, for example: To add this to a query, remember to use `^`, for example:
```elixir ```elixir
filter = AshPhoenix.FilterForm.to_filter(form) filter = AshPhoenix.FilterForm.to_filter_expression(form)
Ash.Query.filter(MyApp.Post, ^filter) Ash.Query.filter(MyApp.Post, ^filter)
``` ```
Alternatively, you can use the shorthand: `filter/2`. Alternatively, you can use the shorthand: `filter/2` to apply the expression directly to a query.
""" """
def to_filter(form) do def to_filter_expression(form) do
if form.valid? do if form.valid? do
case do_to_filter(form, form.resource) do case do_to_filter_expression(form, form.resource) do
{:ok, expr} -> {:ok, expr} ->
{:ok, %Ash.Filter{expression: expr, resource: form.resource}} {:ok, expr}
{:error, form} -> {:error, form} ->
{:error, form} {:error, form}
@ -138,7 +138,7 @@ defmodule AshPhoenix.FilterForm do
Same as `to_filter/1` Same as `to_filter/1`
""" """
def to_filter!(form) do def to_filter!(form) do
case to_filter(form) do case to_filter_expression(form) do
{:ok, filter} -> {:ok, filter} ->
filter filter
@ -174,15 +174,15 @@ defmodule AshPhoenix.FilterForm do
def errors(%Predicate{} = predicate, opts), def errors(%Predicate{} = predicate, opts),
do: AshPhoenix.FilterForm.Predicate.errors(predicate, opts[:transform_errors]) do: AshPhoenix.FilterForm.Predicate.errors(predicate, opts[:transform_errors])
defp do_to_filter(%__MODULE__{components: []}, _), do: {:ok, true} defp do_to_filter_expression(%__MODULE__{components: []}, _), do: {:ok, true}
defp do_to_filter( defp do_to_filter_expression(
%__MODULE__{components: components, operator: operator, negated?: negated?} = form, %__MODULE__{components: components, operator: operator, negated?: negated?} = form,
resource resource
) do ) do
{filters, components, errors?} = {filters, components, errors?} =
Enum.reduce(components, {[], [], false}, fn component, {filters, components, errors?} -> Enum.reduce(components, {[], [], false}, fn component, {filters, components, errors?} ->
case do_to_filter(component, resource) do case do_to_filter_expression(component, resource) do
{:ok, component_filter} -> {:ok, component_filter} ->
{filters ++ [component_filter], components ++ [component], errors?} {filters ++ [component_filter], components ++ [component], errors?}
@ -211,7 +211,7 @@ defmodule AshPhoenix.FilterForm do
end end
end end
defp do_to_filter( defp do_to_filter_expression(
%Predicate{ %Predicate{
field: field, field: field,
value: value, value: value,
@ -230,7 +230,7 @@ defmodule AshPhoenix.FilterForm do
if Ash.Filter.get_operator(operator) do if Ash.Filter.get_operator(operator) do
{:ok, %Ash.Query.Call{name: operator, args: [ref, value], operator?: true}} {:ok, %Ash.Query.Call{name: operator, args: [ref, value], operator?: true}}
else else
{:error, {:operator, "No such function or operator #{operator}"}, []} {:error, {:operator, "No such function or operator #{operator}", []}}
end end
end end
@ -251,7 +251,7 @@ defmodule AshPhoenix.FilterForm do
Converts the form into a filter, and filters the provided query or resource with that filter. Converts the form into a filter, and filters the provided query or resource with that filter.
""" """
def filter(query, form) do def filter(query, form) do
case to_filter(form) do case to_filter_expression(form) do
{:ok, filter} -> {:ok, filter} ->
{:ok, Ash.Query.do_filter(query, filter)} {:ok, Ash.Query.do_filter(query, filter)}