NAME

Declare::Constraints::Simple::Library::Base - Library Base Class

SYNOPSIS

 package My::Constraint::Library;
 use warnings;
 use strict;

 # this installs the base class and helper functions
 use Declare::Constraints::Simple-Library;

 # we can also automagically provide other libraries
 # to the importer
 use base 'Declare::Constraints::Simple::Library::Numericals';

 # with this we define a constraint to check a value
 # against a serial number regular expression
 constraint 'SomeSerial',
   sub {
     return sub {
       return _true if $_[0] =~ /\d{3}-\d{3}-\d{4}/;
       return _false('Not in SomeSerial format');
     };
   };

 1;

DESCRIPTION

This base class contains the common library functionalities. This includes helper functions and install mechanisms.

METHODS

install_into($target)

Installs the base classes and helper functions into the $target namespace. The %CONSTRAINT_GENERATORS package variable of that class will be used as storage for it's constraints.

fetch_constraint_declarations()

Class method. Returns all constraints registered to the class.

fetch_constraint_generator($name)

Class method. Returns the constraint generator code reference registered under $name. The call will raise a croak if the generator could not be found.

prepare_generator($constraint_name, $generator)

Class method. This wraps the $generator in a closure that provides stack and failure-collapsing decisions.

add_constraint_generator($name, $code)

Class method. The actual registration method, used by constraint.

HELPER FUNCTIONS

Note that some of the helper functions are prefixed with _. Although this means they are internal functions, it is ok to call them, as they have a fixed API. They are not distribution internal, but library internal, and only intended to be used from inside constraints.

constraint($name, $code)

constraint 'Foo', sub { ... };

This registers a new constraint in the calling library. Note that constraints have to return result objects. To do this, you can use the helper functions "_result($bool, $msg", _true() and _false($msg).

_result($bool, $msg)

Returns a new result object. It's validity flag will depend on the $bool argument. The $msg argument is the error message to use on failure.

_false($msg)

Returns a non-valid result object, with it's message set to $msg.

_true()

Returns a valid result object.

_info($info)

Sets the current failure info to use in the stack info part.

_apply_checks($value, \@constraints, [$info])

This applies all constraints in the \@constraints array reference to the passed $value. You can optionally specify an $info string to be used in the stack of the newly created non-valid results.

_listify($value)

Puts $value into an array reference and returns it, if it isn't already one.

_with_message($msg, $closure, @args)

This is the internal version of the general Message constraint. It sets the current overriden message to $msg and executes the $closure with @args as arguments.

_with_scope($scope_name, $constraint, @args)

Applies the $constraint to @args in a newly created scope named by $scope_name.

_set_result($scope, $name, $result)

Stores the given $result unter the name $name in $scope.

_get_result($scope, $name)

Returns the result named $name from $scope.

_has_result($scope, $name)

Returns true only if such a result was registered already.

SEE ALSO

Declare::Constraints::Simple, Declare::Constraints::Simple::Library

AUTHOR

Robert 'phaylon' Sedlacek <phaylon@dunkelheit.at>

LICENSE AND COPYRIGHT

This module is free software, you can redistribute it and/or modify it under the same terms as perl itself.