Skip to content

bleargh45/Data-FormValidator-Constraints-MethodsFactory

Repository files navigation

NAME

Data::FormValidator::Constraints::MethodsFactory - Create constraints for Data::FormValidator

SYNOPSIS

use Data::FormValidator::Constraints::MethodsFactory qw(:set :num :bool);

# SET constraints (:set)
constraint_methods => {
  status      => FV_set(1, qw(new active disabled)),
  how_many    => FV_set_num(1, (1 .. 20)),
  province    => FV_set_word(1, "AB QC ON TN NU"),
  seen_before => FV_set_cmp(1, sub { $seen{ $_[0] } }, qw(foo bar)),
}

# NUMERIC constraints (:num)
constraint_methods => {
  how_many      => FV_clamp(1, 1, 10),
  small_amount  => FV_lt(1, 3),
  large_amount  => FV_gt(1, 10),
  small_again   => FV_le(1, 3),
  large_again   => FV_ge(1, 10),
}

# BOOLEAN constraints (:bool)
constraint_methods => {
  # e.g. NOT in the given set
  bad_status => FV_not(
    FV_set(1, qw(new active disabled))
  ),

  # e.g. either the current value, OR validates as an e-mail address
  email => FV_or(
    FV_set(1, $current_value),
    Data::FormValidator::Constraints::email(),
  ),

  # e.g. valid length, AND matches password validation routine
  password => FV_and(
    FV_length_between(6, 32),
    my_password_validation_constraint(),
  ),
}

DESCRIPTION

Data::FormValidator::Constraints::MethodsFactory provides a variety of functions that can be used to generate constraint closures for use with Data::FormValidator.

The functions/constraints provided are based on those from Data::FormValidator::ConstraintsFactory, BUT are designed to be used as "new-style" constraints (while Data::FormValidator::ConstraintsFactory was designed for use with "old-style" constraints). Functionally, this module provides equivalents for all of the constraints that were in Data::FormValidator::ConstraintsFactory, but if you're trying to do things with the new-style you'll want to use the versions from this module instead.

The constraints provided by this module are broken up into three main categories/sections:

  • Set constraints (:set)

    Constraint methods for working with "sets" of data. Useful for when you want to check and make sure that the provided value is from a list of valid choices.

    The following constraints are exported via the :set tag:

    FV_set
    FV_set_num
    FV_set_word
    FV_set_cmp
    
  • Numeric constraints (:num)

    Constraint methods for working with numbers. Useful when you want to check and make sure that the provided value is within a specified range.

    The following constraints are exported via the :num tag:

    FV_clamp
    FV_lt
    FV_gt
    FV_le
    FV_ge
    
  • Boolean constraints (:bool)

    Constraint methods for working with boolean conditions. Useful when you want to combine constraints together to create much more powerful constraints (e.g. validating an e-mail address to make sure that it looks valid and has an associated MX record, BUT only if the value actually changed from what we had in the record previously).

    The following constraints are exported via the :bool tag:

    FV_not
    FV_or
    FV_and
    

METHODS

  • FV_set($result, @set)

    Creates a constraint closure that will return the provided $result if the value is a member of the given @set, or the negation of $result otherwise.

    The eq operator is used for comparison.

  • FV_set_num($result, @set)

    Creates a constraint closure that will return the provided $result if the value is a member of the given @set, or the negation of $result otherwise.

    The == operator is used for comparison.

  • FV_set_word($result, $set)

    Creates a constraint closure that will return the provided $result if the value is a word in the given $set, or the negation of $result otherwise.

  • FV_set_cmp($result, $cmp, @set)

    Creates a constraint closure that will return the provided $result if the value is a member of the given @set, or the negation of $result otherwise.

    $cmp is a function which takes two arguments, and should return true if the two elements are considered equal, otherwise returning false.

  • FV_clamp($result, $low, $high)

    Creates a constraint closure that will return the provided $result if the value is numerically between the given $low and $high bounds, or the negation of $result otherwise.

  • FV_lt($result, $bound)

    Creates a constraint closure that will return the provided $result if the value is numerically less than the given $bound, or the negation of $result otherwise.

  • FV_gt($result, $bound)

    Creates a constraint closure that will return the provided $result if the value is numerically greater than the given $bound, or the negation of $result otherwise.

  • FV_le($result, $bound)

    Creates a constraint closure that will return the provided $result if the value is numerically less than or equal to the given $bound, or the negation of $result otherwise.

  • FV_ge($result, $bound)

    Creates a constraint closure that will return the provided $result if the value is numerically greater than or equal to the given $bound, or the negation of $result otherwise.

  • FV_not($constraint)

    Creates a constraint closure that will return the negation of the result of the given $constraint.

  • FV_or(@constraints)

    Creates a constraint closure that will return the result of the first constraint that returns a non-false result.

  • FV_and(@constraints)

    Creates a constraint closure that will return the result of the first constraint to return a non-false result, -IF- ALL of the constraints return non-false results.

AUTHOR

Graham TerMarsch (cpan@howlingfrog.com)

COPYRIGHT

Copyright (C) 2007, Graham TerMarsch. All Rights Reserved.

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

SEE ALSO

Data::FormValidator.