Packages
formex
0.6.2
0.6.7
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.16
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Form library for Phoenix with Ecto support
Current section
Files
Jump to
Current section
Files
lib/validator/simple.ex
defmodule Formex.Validator.Simple do
@behaviour Formex.Validator
alias Formex.Form
@moduledoc """
Very simple validator.
# Usage:
There is only one option you can use: `:required`.
```
def build_form(form) do
form
|> add(:name, :text_input, validation: [:required])
|> add(:content, :textarea, validation: [:required])
# ...
end
```
"""
@spec validate(Form.t) :: Form.t
def validate(form) do
errors = form
|> Form.get_fields_validatable
|> Enum.map(fn item ->
if item.validation do
errors = form.new_struct
|> Map.from_struct()
|> Map.get(item.name)
|> do_validation(item.validation)
{item.name, errors}
else
{item.name, []}
end
end)
form
|> Map.put(:errors, errors)
end
@spec do_validation(value :: any, rules :: List.t) :: List.t
defp do_validation(value, rules) do
rules
|> Enum.map(fn rule ->
case rule do
:required ->
if (is_binary(value) && value == "") || (!value) do
"This field is required"
end
end
end)
|> Enum.filter(&(&1))
|> Enum.map(fn message ->
{message, []}
end)
end
end