logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

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

Author

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

Description

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

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 haveto 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 overridden 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.

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".

Name

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

See Also

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

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;

See Also