NAME Dancer2::Plugin::DataTransposeValidator - Data::Transpose::Validator plugin for Dancer2 VERSION Version 0.100 SYNOPSIS use Dancer2::Plugin::DataTransposeValidator; post '/' => sub { my $params = params; my $data = validator($params, 'rules-file'); if ( $data->{valid} ) { ... } } DESCRIPTION Dancer2 plugin for for Data::Transpose::Validator FUNCTIONS This module exports the single function "validator". validator( $params, $rules, @additional_args? ) Where: $params is a hash reference of parameters to be validated. $rules is one of: * the name of a rule sub if you are using "rules_class" * the name of a rule file if you are using "rules_dir" * a hash reference of rules * a code reference that will return a hashref of rules Any optional @additional_args are passed as arguments to code references/subs. A hash reference with the following keys is returned: * valid A boolean 1/0 showing whether the parameters validated correctly or not. * values The transposed values as a hash reference. * errors A hash reference containing one key for each parameter which failed validation. See "errors_hash" in "CONFIGURATION" for an explanation of what the value of each parameter key will be. * css A hash reference containing one key for each parameter which failed validation. The value for each parameter is a css class. See "css_error_class" in "CONFIGURATION". CONFIGURATION The following configuration settings are available (defaults are shown here): plugins: DataTransposeValidator: css_error_class: has-error errors_hash: 0 rules_class: MyApp::ValidationRules # OR: rules_dir: validation css_error_class The class returned as a value for parameters in the css key of the hash reference returned by "validator". errors_hash This can has a number of different values: * A false value (the default) means that only a single scalar error string will be returned for each parameter error. This will be the first error returned for the parameter by "errors_hash" in Data::Transpose::Validator. * joined All errors for a parameter will be returned joined by a full stop and a space. * arrayref All errors for a parameter will be returned as an array reference. rules_class This is much preferred over "rules_dir" since it does not eval external files. This is a class (package) name such as "MyApp::Validator::Rules". There should be one sub for each rule name inside that class which returns a hash reference. See "RULES CLASS" for examples. rules_dir Subdirectory of "appdir" in Dancer2::Config in which rules files are stored. NOTE: We recommend you do not use this approach since the rules files are eval'ed with all the security risks that entails. Please use "rules_class" instead. You have been warned. See "RULES DIR" for examples. RULES CLASS The rules class allows the "validator" to be configured using all options available in Data::Transpose::Validator. The rules class must contain one sub for each rule name which will be passed any @optional_args. package MyApp::ValidationRules; sub register { # simple hashref +{ options => { stripwhite => 1, collapse_whitespace => 1, requireall => 1, }, prepare => { email => { validator => "EmailValid", }, email2 => { validator => "EmailValid", }, emails => { validator => 'Group', fields => [ "email", "email2" ], }, }, }; } sub change_password { # args and hashref my %args = @_; +{ options => { requireall => 1, }, prepare => { old_password => { required => 1, validator => sub { if ( $args{logged_in_user}->check_password( $_[0] ) ) { return 1; } else { return ( undef, "Password incorrect" ); } }, }, password => { required => 1, validator => { class => 'PasswordPolicy', options => { username => $args{logged_in_user}->username, minlength => 8, maxlength => 70, patternlength => 4, mindiffchars => 5, disabled => { digits => 1, mixed => 1, specials => 1, } } } }, confirm_password => { required => 1 }, passwords => { validator => 'Group', fields => [ "password", "confirm_password" ], }, }, }; } 1; RULES DIR The rules file format allows the "validator" to be configured using all options available in Data::Transpose::Validator. The rules file must contain a valid hash reference, e.g.: { options => { stripwhite => 1, collapse_whitespace => 1, requireall => 0, unknown => "fail", missing => "undefine", }, prepare => { email => { validator => "EmailValid", required => 1, }, email2 => { validator => { class => "MyValidator::EmailValid", absolute => 1, } }, field4 => { validator => { sub { my $field = shift; if ( $field =~ /^\d+/ && $field > 0 ) { return 1; } else { return ( undef, "Not a positive integer" ); } } } } } } Note that the value of the "prepare" key must be a hash reference since the array reference form of "prepare" in Data::Transpose::Validator is not supported. As an alternative the rules file can contain a code reference, e.g.: sub { my $username = shift; return { options => { stripwhite => 1, }, prepare => { password => { validator => { class => 'PasswordPolicy', options => { username => $username, minlength => 8, } } } } }; } The code reference receives the @additional_args passed to "validator". The code reference must return a valid hash reference. SEE ALSO Dancer2, Data::Transpose ACKNOWLEDGEMENTS Alexey Kolganov for Dancer::Plugin::ValidateTiny which inspired a number of aspects of the original version of this plugin. Stefan Hornburg (Racke) for his valuable feedback. AUTHOR Peter Mottram (SysPete), "" COPYRIGHT AND LICENSE Copyright 2015-2016 Peter Mottram (SysPete). This program is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.