Justify makes it easy to validate unstructured data.
Inspired heavily by Ecto.Changeset, Justify allows you to pipe a plain map into a series of validation functions using a simple and familiar API. No schemas or casting required.
dataset =
%{email: "madebyanthony"}
|> Justify.validate_required(:email)
|> Justify.validate_format(:email, ~r/\S+@\S+/)
dataset.errors #=> [email: {"has invalid format", validation: :format}]
dataset.valid? #=> false
Each validation function will return a Justify.Dataset
struct which can be
passed into the next function. If a validation error is encountered the dataset
will be marked as invalid and an error will be added to the struct.
You can provide your own custom validations using the Justify.add_error/4
function.
defmodule MyValidator do
def validate_color(data, field, color) do
dataset = Justify.Dataset.new(data)
value = Map.get(dataset.data, :field)
if value == color do
dataset
else
Justify.add_error(dataset, field, "wrong color", validation: :color)
end
end
end
Your custom validation can be used as part of a validation pipeline.
dataset =
%{color: "brown"}
|> Justify.validation_required(:color)
|> MyValidator.validate_color(:color, "green")
dataset.errors #=> [color: {"wrong color", validation: :color}]
dataset.valid? #=> false