NAME

   Data::Validate::WithYAML - Validation framework that can be configured
   with YAML files

VERSION

   version 0.20

SYNOPSIS

   Perhaps a little code snippet.

       use Data::Validate::WithYAML;

       my $foo = Data::Validate::WithYAML->new( 'test.yml' );
       my %map = (
           name     => 'Test Person',
           password => 'xasdfjakslr453$',
           plz      => 64569,
           word     => 'Herr',
           age      => 55,
       );

       for my $field ( keys %map ){
           print "ok: ",$map{$field},"\n" if $foo->check( $field, $map{$field} );
       }

   data.yml

     ---
     step1:
         name:
             type: required
             length: 8,122
         password:
             type: required
             length: 10,
         plz:
             regex: ^\d{4,5}$
             type: optional
         word:
             enum:
                 - Herr
                 - Frau
                 - Firma
         age:
             type: required
             min: 18
             max: 65

METHODS

new

     my $foo = Data::Validate::WithYAML->new( 'filename' );
     my $foo = Data::Validate::WithYAML->new(
         'filename',
         allow_subs => 1,
         no_steps   => 1,
     );

   creates a new object.

set_optional

   This method makes a field optional if it was required

set_required

   This method makes a field required if it was optional

validate

   This subroutine validates one form. You have to pass the form name (key
   in the config file), a hash with fieldnames and its values

       my %fields = (
           username => $cgi->param('user'),
           passwort => $password,
       );
       $foo->validate( 'step1', %fields );

fieldnames

errstr

message

   returns the message if specified in YAML

     $obj->message( 'fieldname' );

check_list

     $obj->check_list('fieldname',['value','value2']);

   Checks if the values match the validation criteria. Returns an arrayref
   with checkresults:

       [
           1,
           0,
       ]

check

     $obj->check('fieldname','value');

   checks if a value is valid. returns 1 if the value is valid, otherwise
   it returns 0.

fieldinfo

   Returns the config for the given field.

   Your test.yml:

     ---
     age:
       type: required
       min: 18
       max: 65

   Your script:

       my $info = $validator->fieldinfo( 'age' );

   $info is a hashreference then:

       {
           type => 'required',
           min  => 18,
           max  => 65,
       }

FIELDCONFIG

   These config options can be used to configure a field:

     * type

     mandatory. It defines if a value is required or optional

     * regex

     A value for this field is valid if the value matches this regular
     expression

     * min

     For numeric fields. A valid value must be greater than the value
     given for min

     * max

     Also for numeric fields. A valid value must be lower than the value
     given for max

     * enum

     A list of valid values.

     * sub

     e.g.

       sub: { $_ eq 'test' }

     A codeblock that is evaled. You can only use this option when you set
     allow_subs in constructor call.

     * length

     A value for the field must be of length within this range

       length: 1,

     longer than 1 char.

       length: 3,5

     length must be between 3 and 5 chars

       length: ,5

     Value must be at longest 5 chars.

       length: 3

     Length must be exactly 3 chars

     * depends_on

     Change the config for a field depending on an other field. This only
     works when validate is called.

     * case

     List of values the field it depends on can have. In case the field it
     depends on has a value listed in case, the default config for the
     file is changed.

       password:
          type: required
          length: 1,
          depends_on: group
          case:
              admin:
                  length: 10,
              agent:
                  length: 5,

     If the value for group is "admin", the given password must be longer
     than 10 chars, for agents the password must be longer than 5 chars
     and for every other group the password must be longer than 1 char.

     * depends_lax

     Without this setting, a value for the field this field depends on
     must be given.

     * datatype

     For a few types of values there are predefined checks.

       * num

       * int

       * positive_int

     * plugin

     Use a plugin (e.g. Data::Validate::WithYAML::Plugin::EMail) to check
     the value.

       plugin: EMail

AUTHOR

   Renee Baecker <[email protected]>

COPYRIGHT AND LICENSE

   This software is Copyright (c) 2014 by Renee Baecker.

   This is free software, licensed under:

     The Artistic License 2.0 (GPL Compatible)