defmodule DryValidation.Types.Integer do
@moduledoc """
Represents an integer type.
Will try to cast strings into integer values.
```
DryValidation.schema do
required :age, Types.Integer
end
```
"""
alias DryValidation.Types.Func
@doc false
def cast(value) when is_number(value), do: value
def cast(value) when is_binary(value) do
case Integer.parse(value) do
{number, ""} -> number
_ -> value
end
end
def cast(value), do: value
@doc false
def valid?(value) when is_number(value), do: true
def valid?(_value), do: false
@doc """
Validates that the input value is greater than the value of the first function argument.
```
DryValidation.schema do
required :age, Types.Integer.greater_than(18)
end
```
"""
def greater_than(value) do
%Func{
fn: fn v -> v > value end,
type: __MODULE__,
error_message: "is not greater than #{value}"
}
end
@doc """
Validates that the input value is greater than or equal to the value of the first function argument.
```
DryValidation.schema do
required :age, Types.Integer.greater_than_or_equal(18)
end
```
"""
def greater_than_or_equal(value) do
%Func{
fn: fn v -> v >= value end,
type: __MODULE__,
error_message: "is not greater than or equal to #{value}"
}
end
@doc """
Validates that the input value is less than the value of the first function argument.
```
DryValidation.schema do
required :age, Types.Integer.less_than(100)
end
```
"""
def less_than(value) do
%Func{
fn: fn v -> v < value end,
type: __MODULE__,
error_message: "is not less than #{value}"
}
end
@doc """
Validates that the input value is less than or equal to the value of the first function argument.
```
DryValidation.schema do
required :age, Types.Integer.less_than_or_equal(100)
end
```
"""
def less_than_or_equal(value) do
%Func{
fn: fn v -> v <= value end,
type: __MODULE__,
error_message: "is not less than or equal to #{value}"
}
end
end