# NAME

Data::Validator::Recursive - recursive data friendly Data::Validator

# SYNOPSIS

   use Data::Validator::Recursive;

   # create a new rule
   my $rule = Data::Validator::Recursive->new(
       foo => 'Str',
       bar => { isa => 'Int' },
       baz => {
           isa  => 'HashRef', # default
           rule => [
               hoge => { isa => 'Str', optional => 1 },
               fuga => 'Int',
           ],
       },
   );

   # input data for validation
   $input = {
       foo => 'hoge',
       bar => 1192,
       baz => {
           hoge => 'kamakura',
           fuga => 1185,
       },
   };

   # do validation
   my $params = $rule->validate($iput) or croak $rule->error->{message};

# DESCRIPTION

Data::Validator::Recursive is recursive data friendly Data::Validator.

You are creates the validation rules contain `NoThrow` as default.

# METHODS

## `new($arg_name => $rule [, ... ]) : Data::Validator::Recursive`

Create a validation rule.

   my $rule = Data::Validator::Recursive->new(
       foo => 'Str',
       bar => { isa => 'Int' },
       baz => {
           rule => [
               hoge => { isa => 'Str', optional => 1 },
               fuga => 'Int',
           ],
       },
   );

_$rule_'s attributes is [Data::Validator](https://metacpan.org/pod/Data::Validator) compatible, And additional attributes as follows:

- `rule => $rule : Array | Hash | Data::Validator::Recursive | Data::Validator`

   You can defined a _$rule_ recursively to _rule_.

   For example:

       my $rule = Data::Validator::Recursive->new(
           foo => {
             rule => [
                 bar => {
                     baz => [
                         rule => ...
                     ],
                 },
             ],
           }
       );

- `with => $extention : Str | Array`

   Applies _$extention_ to this rule.

   See also [Data::Validator](https://metacpan.org/pod/Data::Validator).

## `with(@extentions)` : Data::Validator::Recursive

Applies _@extention_ to this rule.

See also [Data::Validator](https://metacpan.org/pod/Data::Validator).

## `validate(@args) : \%hash | undef`

Validates _@args_ and returns a restricted HASH reference, But return undefined value if there found invalid parameters.

   my $params = $rule->validate(@args) or croak $rule->error->{message};

## `has_errors() : Bool`

Return true if there is an error.

   $rule->validate($params);
   if ($rule->has_errors) {
      ...
   }

## `errors() : \@errors | undef`

Returns last error datum or undefined value.

   my $errors = $rule->errors;
   # $error = [
   #     {
   #         name    => 'xxx',
   #         type    => 'xxx',
   #         message => 'xxx',
   #     },
   #     { ... },
   #     ...
   # ]

## `error() : \%error | undef`

Returns last first error data or undefined value.

   my $error = $rule->error;
   # $error = $rule->errors->[0]

## `clear_errors  : \@errors | undef`

Clear last errors after return last errors or undefined value.

   my $errors = $rule->clear_errors;
   say $rule->has_errors; # 0

# AUTHOR

Yuji Shimada <xaicron {@} GMAIL.COM>

# CONTRIBUTORS

punytan

# COPYRIGHT

Copyright 2013 - Yuji Shimada

# LICENSE

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

# SEE ALSO

[Data::Validator](https://metacpan.org/pod/Data::Validator)