Packages

Lib for elixir

Current section

Files

Jump to
gulib lib validations inclusion.ex
Raw

lib/validations/inclusion.ex

defmodule Gulib.Validations.Inclusion do
def validate(value, options) when is_list(options) do
Gulib.Validate.unless_skipping(value, options) do
if Keyword.keyword?(options) do
list = Keyword.get(options, :in, [])
check_type = Keyword.get(options, :check_type, :radio)
message = Keyword.get(options, :message)
case check_type do
:multiple ->
values =
cond do
is_nil(value) -> []
is_list(value) -> value
true -> [value]
end
cond do
not is_list(values) ->
{:fail, :not_inclusion, message || Gulib.Translator.dgettext("validate", "must be a list", values: values)}
Enum.empty?(values) ->
{
:fail, :not_inclusion, message || Gulib.Translator.dgettext(
"validate", "must be items of %{list}", list: inspect(list), values: values
)
}
Enum.any?(invalid_values = values -- list) ->
{
:fail, :not_inclusion, message || Gulib.Translator.dgettext(
"validate", "you put invalid not inclusion values: %{invalid_values}", invalid_values: inspect(invalid_values)
)
}
true -> :ok
end
_ ->
if Enum.any?(list) && Enum.member?(list, value) do
:ok
else
{:fail, :not_inclusion, message || Gulib.Translator.dgettext(
"validate", "must be one of %{list}", list: inspect(list), value: value
)
}
end
end
else
validate(value, [in: options])
end
end
end
end