NAME
Bubblegum::Constraints - Type and Constraints Library for Bubblegum
VERSION
version 0.30
SYNOPSIS
package Server;
use Bubblegum::Class;
use Bubblegum::Constraints -typing;
has typeof_object, config => sub {
# build config data
};
DESCRIPTION
Bubblegum::Constraints is the standard type-checking library for Bubblegum applications with a focus on minimalism and data integrity.
By default, no functions are exported when using this package, all functionality desired will need to be explicitly requested, and because many functions belong to a particular group of functions there are export tags which can be used to export sets of functions by group name. Any function can also be exported individually. The following are a list of functions and groups currently available:
EXPORTS
-attr
The attr export group currently exports a single functions which overrides the has
accessor maker in the calling class and implements a more flexible interface specification. If the has
function does not exist in the caller's namespace then override will be aborted, otherwise, the has
function will now support the following:
has 'attr1';
is the equivalent of:
has 'attr1' => (
is => 'ro',
);
and if type validators are exported via -typesof
, or -typing
:
use Bubblegum::Constraints -typesof;
has typeof_object, 'attr2';
is the equivalent of:
has 'attr2' => (
is => 'ro',
isa => typeof_object,
);
and/or including a default value, for example:
use Bubblegum::Constraints -typesof;
has 'attr1' => sub {
# define lazy builder attr1
};
has typeof_object, 'attr2' => sub {
# define lazy builder attr2
};
is the equivalent of:
has 'attr1' => (
is => 'ro',
lazy => 1,
builder => '_build_attr1',
);
sub _build_attr1 {
# ...
}
has 'attr2' => (
is => 'ro',
isa => typeof_object,
lazy => 1,
builder => '_build_attr2',
);
sub _build_attr2 {
# ...
}
also note, attribute builders are implied if a method is discovered with a name matching the pattern _build_${attribute_name}
, for example:
use Bubblegum::Constraints -attr;
has 'attr1';
sub _build_attr1 {
# ...
}
is the equivalent of:
has 'attr1' => (
is => 'ro',
lazy => 1,
builder => '_build_attr1',
);
sub _build_attr1 {
# ...
}
-constraints
The constraints export group exports all functions which have the _
prefix and provides functionality similar to importing the "-types" and "-typesof" export groups except that the functions it emits are abbreviated multi-purpose versions of the functions emitted by the -types and -typesof export groups. These functions take a single argument and perform fatal type checking, or, if invoked with no arguments returns a code reference to the fatal type checking routine. The following is a list of functions exported by this group:
_aref
_arrayref
_bool
_boolean
_class
_classname
_cref
_coderef
_def
_defined
_fh
_filehandle
_glob
_globref
_href
_hashref
_int
_integer
_num
_number
_obj
_object
_ref
_reference
_rref
_regexpref
_sref
_scalarref
_str
_string
_nil
_null
_undef
_undefined
-isas
The isas export group exports all functions which have the isa_
prefix. These functions take a single argument and perform non-fatal type checking and return true or false. The following is a list of functions exported by this group:
isa_aref
isa_arrayref
isa_bool
isa_boolean
isa_class
isa_classname
isa_cref
isa_coderef
isa_def
isa_defined
isa_fh
isa_filehandle
isa_glob
isa_globref
isa_href
isa_hashref
isa_int
isa_integer
isa_num
isa_number
isa_obj
isa_object
isa_ref
isa_reference
isa_rref
isa_regexpref
isa_sref
isa_scalarref
isa_str
isa_string
isa_nil
isa_null
isa_undef
isa_undefined
-minimal
The minimal export group exports all functions from the "-constraints", "-isas", and "-nots" export groups as well as the functionality provided by the "-attr" tag. It is a means to export the simplest type-related functionality.
-nots
The nots export group exports all functions which have the not_
prefix. These functions take a single argument and perform non-fatal negated type checking and return true or false. The following is a list of functions exported by this group:
not_aref
not_arrayref
not_bool
not_boolean
not_class
not_classname
not_cref
not_coderef
not_def
not_defined
not_fh
not_filehandle
not_glob
not_globref
not_href
not_hashref
not_int
not_integer
not_num
not_number
not_obj
not_object
not_ref
not_reference
not_rref
not_regexpref
not_sref
not_scalarref
not_str
not_string
not_nil
not_null
not_undef
not_undefined
-types
The types export group exports all functions which have the type_
prefix. These functions take a single argument/expression and perform fatal type checking operation returning the argument/expression if successful. The follow is a list of functions exported by this group:
type_aref
type_arrayref
type_bool
type_boolean
type_class
type_classname
type_cref
type_coderef
type_def
type_defined
type_fh
type_filehandle
type_glob
type_globref
type_href
type_hashref
type_int
type_integer
type_num
type_number
type_obj
type_object
type_ref
type_reference
type_rref
type_regexpref
type_sref
type_scalarref
type_str
type_string
type_nil
type_null
type_undef
type_undefined
-typesof
The typesof export group exports all functions which have the typeof_
prefix. These functions take no argument and return a type-validation code-routine to be used with your object-system of choice. The following is a list of functions exported by this group:
typeof_aref
typeof_arrayref
typeof_bool
typeof_boolean
typeof_class
typeof_classname
typeof_cref
typeof_coderef
typeof_def
typeof_defined
typeof_fh
typeof_filehandle
typeof_glob
typeof_globref
typeof_href
typeof_hashref
typeof_int
typeof_integer
typeof_num
typeof_number
typeof_obj
typeof_object
typeof_ref
typeof_reference
typeof_rref
typeof_regexpref
typeof_sref
typeof_scalarref
typeof_str
typeof_string
typeof_nil
typeof_null
typeof_undef
typeof_undefined
-typing
The typing export group exports all functions from the "-types", "-typesof", "-isas", and "-nots" export groups as well as the functionality provided by the "-attr" tag. It is a means to export all type-related functions minus the multi-purpose functions provided by the "-constraints" export group.
AUTHOR
Al Newkirk <anewkirk@ana.io>
COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Al Newkirk.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.