NAME
Data::Type::Guard - inspects members of foreign objects
SYNOPSIS
my
$dtg
= Data::Type::Guard->new
(
allow
=> [
'Human'
,
'Others'
],
# blessed objects of that type
tests
=>
{
=> STD::EMAIL( 1 ),
# mxcheck ON ! see Email::Valid
firstname
=> STD::WORD,
social_id
=> [ STD::NUM, STD::VARCHAR( 10 ) ],
contacts
=>
sub
{
my
%args
=
@_
;
exists
$args
{lucy} },
}
);
die
"object is rejected"
unless
$dtg
->inspect(
$h
);
# compact version
valid_object {
=> STD::EMAIL( 1 ),
firstname
=> STD::WORD },
$object_a
,
$object_b
;
INTRODUCTION
This class inspects others objects member return-values for a specific datatype.
API
CONSTRUCTOR
my
$dtg
= Data::Type::Guard->new(
allow
=>
$aref
,
tests
=>
$href
)
allow => $aref
If is set then the inspect
function below will return 0
if the object is not a reference of the requested type. If empty, isn't selective for special references ( HASH, ARRAY, "CUSTOM", .. ).
tests => $href
Keys are the members names (anything that can be called via the $o->member syntax) and the type(s) as value. When a member should match multple types, they should be contained in an array reference ( i.e. 'fon' => [ qw(NUM TELEPHONE) ] ). Instead of types a reference to a sub is allowed, while it must return true if it matches (see valid_object() TYPE, .. }, @objects )">).
METHODS
$dtg->inspect( $blessed )
Accepts a blessed reference as a parameter. It returns 0
if a guard test or type constrain will fail, otherwise 1
.
[Note] A more appropriate report on failure is planned.
FUNCTIONS
valid_object( { member => TYPE, .. }, @objects )
Valids members of objects against multiple 'types' or code reference. Any $object
must have an accessor function to its method (same as the key given in the member
$href
). See Data::Type::Guard for oo-interface for that.
my
$car
= Car->new(
speed
=> 300,
year
=>
'2000'
,
owner_firstname
=>
'micheal'
);
valid_object( {
year
=> DATE(
'YEAR'
),
owner_firstname
=> VARCHAR(20),
speed
=> INT },
$car
) or
die
;
AUTO DETECTION
$Data::Type::Guard::AUTO_DETECT controls if information from the reflection of an object is superseeding the tests => parameter. Visit Class::Maker reflection manual ( for the types =
{}> field ). Example:
use
Data::Type::Guard;
class
'My::Car'
,
{
public
=>
{
string
=> [
qw( name manufactorer )
],
int
=> [
qw( serial )
],
},
types
=>
{
name
=> STD::WORD,
serial
=> STD::NUM,
},
};
my
$dtg
= Data::Type::Guard->new();
die
"My::Car isnt correctly initialized"
unless
$dtg
->inspect( My::Car->new(
serial
=>
'aaaaaa'
,
name
=>
'111'
) );
[Note] This feature is available after Class::Maker '0.5.18', but this is still an undocumented yet.
EXPORT
None per default.
valid_object
.
':all' loads qw(valid_object)
CONTACT
Sourceforge http://sf.net/projects/datatype is hosting a project dedicated to this module. And I enjoy receiving your comments/suggestion/reports also via http://rt.cpan.org or http://testers.cpan.org.
AUTHOR
Murat Uenalan, <muenalan@cpan.org>