MooX::Types::MooseLike::Base - Moose like types for Moo
package MyPackage; use Moo; use MooX::Types::MooseLike::Base qw(:all); has "beers_by_day_of_week" => ( isa => HashRef ); has "current_BAC" => ( isa => Num ); # Also supporting is_$type. For example, is_Int() can be used as follows has 'legal_age' => ( is => 'ro', isa => sub { die "$_[0] is not of legal age" unless (is_Int($_[0]) && $_[0] > 17) }, );
Moo attributes (like Moose) have an 'isa' property. This module provides some basic types for this property. One can import all types with ':all' tag or import a list of types like:
use MooX::Types::MooseLike::Base qw/HashRef CodeRef/;
so one could then declare some attributtes like:
has 'contact' => ( is => 'ro', isa => HashRef, ); has 'guest_list' => ( is => 'ro', isa => ArrayRef, ); has 'records' => ( is => 'ro', isa => ArrayRef[Int], );
These types provide a check that the contact attribute is a hash reference, that the guest_list is an array reference, and that the records are an array of hash references.
Any type (test is always true)
Synonymous with Any type
A type that is not defined
A type that is defined
A boolean 1|0 type
A non-reference type
A reference type
A non-reference type where a reference to it is a SCALAR
A number type
An integer type
An ArrayRef (ARRAY) type
A HashRef (HASH) type
A CodeRef (CODE) type
A regular expression reference type
A glob reference type
A type that is either a builtin perl filehandle or an IO::Handle object
A type that is an object (think blessed)
The following types can be parameterized with other types.
For example, ArrayRef[HashRef]
For example, Maybe[Int] would be an integer or undef
In addition, we have some parameterized types that take string arguments.
Check if the attribute is an object instance of one or more classes. Uses blessed and isa to do so. Takes a list of class names as the argument. For example:
blessed
isa
isa => InstanceOf['MyClass','MyOtherClass']
Note: InstanceOf is passed an ArrayRef[Str]
Check if the attribute is blessed and consumes one or more roles. Uses blessed and does to do so. Takes a list of role names as the arguments. For example:
does
isa => ConsumerOf['My::Role', 'My::AnotherRole']
Check if the attribute is blessed and has one or more methods. Uses blessed and can to do so. Takes a list of method names as the arguments. For example:
can
isa => HasMethods[qw/postulate contemplate liberate/]
Check if the attribute is any of the listed types (think union) Takes a list of types as the argument. For example:
isa => AnyOf[Int, ArrayRef[Int], HashRef[Int]]
Note: AnyOf is passed an ArrayRef[CodeRef]
Check if the attribute is all of the listed types (think intersection) Takes a list of types as the argument. For example:
isa => AllOf[ InstanceOf['Human'], ConsumerOf['Air'], HasMethods['breath', 'dance'] ],
Mateu Hunter hunter@missoula.org
hunter@missoula.org
mst has provided critical guidance on the design
Copyright 2011-2013 Mateu Hunter
You may distribute this code under the same terms as Perl itself.
To install MooX::Types::MooseLike, copy and paste the appropriate command in to your terminal.
cpanm
cpanm MooX::Types::MooseLike
CPAN shell
perl -MCPAN -e shell install MooX::Types::MooseLike
For more information on module installation, please visit the detailed CPAN module installation guide.