NAME
   MooseX::Role::Validatable - Role to add validation to a class

SYNOPSIS
       package MyClass;

       use Moose;
       with 'MooseX::Role::Validatable';

       has 'attr1' => (is => 'ro', lazy_build => 1);

       sub _build_attr1 {
           my $self = shift;

           # Note initialization errors
           $self->add_errors( {
               message => 'Error: blabla',
               message_to_client => 'Something is wrong!'
           } ) if 'blabla';
       }

       sub _validate_some_other_errors { # _validate_*
           my $self = shift;

           my @errors;
           push @errors, {
               message => '...',
               message_to_client => '...',
           };

           return @errors;
       }

       ## use
       my $ex = MyClass->new();

       if (not $ex->initialized_correctly) {
           my @errors = $ex->all_init_errors();
           ...;    # We didn't even start with good data.
       }

       if (not $ex->confirm_validity) { # does not pass those _validate_*
           my @errors = $ex->all_errors();
           ...;
       }

DESCRIPTION
   MooseX::Role::Validatable is a Moo/Moose role which provides a standard
   way to add validation to a class.

METHODS
 initialized_correctly
   no error when init the object (no add_errors is called)

 add_errors
       $self->add_errors(...)

   add errors on those lazy attributes or sub BUILD

 confirm_validity
   run all those _validate_* messages and returns true if no error found.

 all_errors
   An array of the errors currently noted. combined with all_init_errors
   and all_validation_errors

   all errors including below methods are instance of error_class, default
   to MooseX::Role::Validatable::Error

 all_init_errors
   all errors on init

 all_validation_errors
   all errors on validation

 all_errors_by_severity
   order by severity

 primary_validation_error
   the first error of all_errors_by_severity

 validation_methods
   A list of all validation methods available on this object. This can be
   auto-generated from all methods which begin with "_validate_" which is
   especially helpful in devleoping new validations.

   You may wish to set this list directly on the object, if you create and
   validate a lot of static objects.

 error_class
   default to MooseX::Role::Validatable::Error, override by

       has '+error_class' => (is => 'ro', default => sub { 'My::Validatable::Error' });

       # or
       ->new(error_class => 'My::Validatable::Error');

AUTHOR
   Binary.com <[email protected]>

COPYRIGHT
   Copyright 2014- Binary.com

LICENSE
   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.

SEE ALSO