Validatex is a simple Elixir library for validating (input) data
Elixir
Switch branches/tags
Nothing to show
Pull request Compare This branch is 7 commits ahead of rpip:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
.travis.yml
LICENSE
README.md
mix.exs
package.exs
package.head.exs

README.md

Validatex

Build Status

Validatex is a simple Elixir library for validating (input) data

Validation Primitives

Using structs defined in Validatex, one can check individual values against validators.

For example:

iex> alias Validatex, as: V
[]
iex> V.Validate.valid?(%V.Range{to: 10}, 1)
true
iex> V.Validate.valid?(%V.Range{to: 0}, 1)
:greater

Also, if the second argument is not a validator, it will be matched against the first argument:

iex> V.Validate.valid?(1,1)
true
iex> V.Validate.valid?(2,1)
:lesser
iex> V.Validate.valid?(0, 1)
:greater

Custom Validators

One can define custom validators using by implementing Validatex.Validate protocol

  defmodule MyValidator do
    defstruct q: nil

    defimpl Validatex.Validate do
      alias MyValidator, as: V
      def valid?(%V{}, v), do: v
    end
  end

Validation Sheets

Instead of running individual validations, you can define so called "validation sheets" and test them using Validatex.validate.

Validation sheet is a list of validations in the following format:

{name, value, spec}

For example:

[
 {"user.name", username, %V.Length{is: %V.Range{from: 3, to: 16}}},
 {"user.email", email, %V.Length{is: %V.Range{from: 3, to: 255}}},
 {"user.age", age, %V.Numericality{allow_string: true}}
]

Just as an example, if you try to put a string with a non-numeric value into age, you'll get this:

iex> V.validate(plan)
[{"user.age","wrong",%Validatex.Numericality{default: 0},:number_expected}]