Current section
Files
Jump to
Current section
Files
lib/filtrex/conditions/boolean.ex
defmodule Filtrex.Condition.Boolean do
use Filtrex.Condition
@type t :: Filtrex.Condition.Boolean
@moduledoc """
`Filtrex.Condition.Boolean` is a specific ondition type for handling boolean flags. It allows an empty string for false value as well as string representations "true" and "false". Its comparators only consist of "equals" or "does not equal". There are no configuration options for the boolean condition.
"""
def type, do: :boolean
def comparators, do: ["equals", "does not equal"]
def parse(_config, %{column: column, comparator: comparator, value: value, inverse: inverse}) do
parsed_comparator = validate_in(comparator, comparators)
condition = %Condition.Boolean{
type: type,
inverse: inverse,
column: column,
comparator: parsed_comparator,
value: validate_value(value)
}
case condition do
%Condition.Boolean{comparator: nil} ->
{:error, parse_error(comparator, :comparator, :date)}
%Condition.Boolean{value: nil} ->
{:error, parse_value_type_error(value, :boolean)}
_ ->
{:ok, condition}
end
end
defp validate_value(""), do: false
defp validate_value("true"), do: true
defp validate_value("false"), do: false
defp validate_value(bool) when is_boolean(bool), do: bool
defp validate_value(_), do: nil
defimpl Filtrex.Encoder do
encoder "equals", "does not equal", "column = ?"
encoder "does not equal", "equals", "column != ?"
end
end