NAME
MooseX::Types::Implements - Require objects to implement a role/interface
VERSION
version 1.103350
SYNOPSIS
Interfaces definitions:
package
My::Interfaces::Driveable;
use
Moose::Role;
requires
qw( drive stop )
;
package
My::Interfaces::Pet;
use
Moose::Role;
requires
qw( play obey )
;
package
My::Interfaces::Animal;
use
Moose::Role;
requires
qw( eat sleep roam )
;
Classes:
package
My::Car;
use
Moose;
sub
drive { ... };
sub
stop { ... };
package
My::Bicycle;
use
Moose;
sub
drive { ... };
sub
stop { ... };
package
My::TimeMachine;
use
Moose;
sub
teleport { ... };
package
My::Dog;
use
Moose;
sub
play { ... };
sub
obey { ... };
sub
eat { ... };
sub
sleep
{ ... };
sub
roam { ... };
package
My::Skunk;
use
Moose;
sub
eat { ... };
sub
sleep
{ ... };
sub
roam { ... };
And finally:
package
main;
my
$class
= My::Class->new();
# My::Car and My::Bicycle implement My::Interfaces::Driveable
$class
->vehicle( My::Car->new() );
$class
->vehicle( My::Bicycle->new() );
# throws error - you cannot drive TimeMachine
$class
->vehicle( My::TimeMachine->new() );
# dog is a Pet and an Animal
$class
->pet_animal( My::Dog->new() );
# throws error - Skunk is an Animal, but not really a Pet
$class
->pet_animal( My::Skunk->new() );
DESCRIPTION
This class provides parameterizable polymorphic type constraint.
TYPES
Implements
# single role
has
'vehicle'
=> (
is
=>
'rw'
,
isa
=> Implements[
qw( My::Interfaces::Driveable )
],
);
# all roles need to be implemented
has
'pet_animal'
=> (
is
=>
'rw'
,
isa
=> Implements[
qw( My::Interfaces::Pet My::Interfaces::Animal )
],
);
Implements
is a parameterizable type constraint that requires Objects
to implement specified roles (automatically loaded).
Subtyping is also supported:
SEE ALSO
AUTHOR
Alex J. G. Burzyński <ajgb@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2010 by Alex J. G. Burzyński <ajgb@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.