# Paraiso
Validation and sanitization library of Elixir for nested objects and arrays
## Install
```elixir
def deps do
[
{:paraiso, "~> 0.0.1"}
]
end
```
## Usage Example
```elixir
import Paraiso
email_regex =
~r/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/
props = [
prop(:user_id, :required, {:string, {:regex, ~r/^[a-zA-Z0-9]{1,255}$/}}),
prop(:name, {:optional, ""}, {:string, {:range, 0, 255}}),
prop(
:emails,
{:optional, []},
{:array,
{:object,
[
{:email_address, :required, {:string, {:regex, email_regex}}},
{:is_primary, :required, :boolean},
{:notification, {:optional, false}, :boolean}
]}}
)
]
## Success case
sample = %{
"user_id" => "keshihoriuchi",
"name" => "Takeshi Horiuchi",
"emails" => [
%{
"email_address" => "keshihoriuchi@gmail.com",
"is_primary" => true,
"notification" => true
},
%{
"email_address" => "keshihoriuchi2@gmail.com",
"is_primary" => false
}
]
}
{:ok, result} = Paraiso.process(sample, props)
expect = %{
user_id: "keshihoriuchi",
name: "Takeshi Horiuchi",
emails: [
%{
email_address: "keshihoriuchi@gmail.com",
is_primary: true,
notification: true
},
%{
email_address: "keshihoriuchi2@gmail.com",
is_primary: false,
notification: false
}
]
}
assert(result === expect)
## Failure case
sample = %{
"user_id" => "keshihoriuchi",
"name" => "Takeshi Horiuchi",
"emails" => [
%{
"email_address" => "invalid string",
"is_primary" => true,
"notification" => true
},
%{
"email_address" => "keshihoriuchi2@gmail.com",
"is_primary" => false
}
]
}
assert({:error, [:emails, 0, :email_address], :invalid} === Paraiso.process(sample, props))
```
## API (Japanese Language)
https://hexdocs.pm/paraiso/Paraiso.html