Name
Data::Validation::Constraints - Test data values for conformance with constraints
Synopsis
use Data::Validation::Constraints;
%config = ( method => $method, %{ $self->constraints->{ $id } || {} } );
$constraint_ref = Data::Validation::Constraints->new_from_method( %config );
$bool = $constraint_ref->validate( $value );
Description
Tests a single data value for conformance with a constraint
Configuration and Environment
Defines the following attributes:
allowed
-
An array reference of permitted values used by "isAllowed"
max_length
-
Used by "isValidLength". The length of the supplied value must be numerically less than this
max_value
-
Used by "isBetweenValues".
method
-
Name of the constraint to apply. Required
min_length
-
Used by "isValidLength".
min_value
-
Used by "isBetweenValues".
pattern
-
Used by "isMathchingRegex" as the pattern to match the supplied value against
required
-
If true then undefined values are not allowed regardless of what other validation would be done
type
-
If
isMatchingType
matches against this value type_libraries
-
A list of type libraries to add to the registry. Defaults to; Unexpected::Types
type_registry
-
Lazily evaluated instance of Type::Registry to which the
type_libraries
have been added value
-
Used by the "isEqualTo" method as the other value in the comparison
Subroutines/Methods
new_from_method
A class method which implements a factory pattern using the method
attribute to select the subclass
validate
Called by Data::Validation::check_field this method implements tests for a null input value so that individual validation methods don't have to. It calls either a built in validation method or validate
which should have been overridden in a factory subclass. An exception is thrown if the data value is not acceptable
isAllowed
Is the the value in the $self->allowed
list of values
isBetweenValues
Test to see if the supplied value is numerically greater than $self->min_value
and less than $self->max_value
isEqualTo
Test to see if the supplied value is equal to $self->value
. Calls isValidNumber
on both values to determine the type of comparison to perform
isHexadecimal
Tests to see if the value matches the regular expression for a hexadecimal number
isMandatory
Undefined and null values are not allowed
isMatchingRegex
Does the supplied value match the pattern? The pattern defaults to $self->pattern
isMatchingType
Does the supplied value pass the type constraint check? The constraint defaults to $self->type
isPrintable
Is the supplied value entirely composed of printable characters?
isSimpleText
Simple text is defined as matching the pattern '\A [a-zA-Z0-9_ \-\.]+ \z'
isValidHostname
Calls gethostbyname
on the supplied value
isValidIdentifier
Identifiers must match the pattern '\A [a-zA-Z_] \w* \z'
isValidInteger
Tests to see if the supplied value is an integer
isValidLength
Tests to see if the length of the supplied value is greater than $self->min_length
and less than $self->max_length
isValidNumber
Return true if the supplied value looks_like_number
isValidText
Text is defined as any string matching the pattern '\A [ !%&\(\)\*\+\,\-\./0-9:;=\?@A-Z\[\]_a-z\|\~]+ \z'
isValidTime
Matches against a the pattern '\A \d\d : \d\d (?: : \d\d )? \z'
External Constraints
Each of these constraint subclasses implements the required validate
method
Date
If the str2time
method in the Class::Usul::Time module can parse the supplied value then it is deemed to be a valid date
If the address
method in the Email::Valid module can parse the supplied value then it is deemed to be a valid email address
Password
Currently implements a minimum password length of six characters and that the password contain at least one non alphabetic character
Path
Screen out these characters: ; & * { } and space
Postcode
Tests to see if the supplied value matches one of the approved patterns for a valid postcode
URL
Call the request
method in HTTP::Tiny to test if a URL is accessible
Diagnostics
None
Dependencies
Incompatibilities
There are no known incompatibilities in this module
Bugs and Limitations
There is no POD coverage test because the subclasses docs are in here instead
The Data::Validation::Constraints::Date module requires the module Class::Usul::Time and this is not listed as prerequisite as it would create a circular dependency
Please report problems to the address below. Patches are welcome
Author
Peter Flanigan, <pjfl@cpan.org>
License and Copyright
Copyright (c) 2016 Peter Flanigan. All rights reserved
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic
This program is distributed in the hope that it will be useful, but WITHOUT WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE