NAME
MooX::Types::MooseLike - some Moosish types and a type builder
SYNOPSIS
package MyApp::Types;use MooX::Types::MooseLike;use base qw(Exporter);our @EXPORT_OK = ();# Define some typesmy $defs = [{name => 'MyType',test => sub { predicate($_[0]) },message => sub { "$_[0] is not the type we want!" }},{name => 'VarChar',test => sub {my ($value, $param) = @_;length($value) <= $param;},message => sub { "$_[0] is too large! It should be less than or equal to $_[1]." }}];# Make the types available - this adds them to @EXPORT_OK automatically.MooX::Types::MooseLike::register_types($defs, __PACKAGE__);...# Somewhere in code that uses the typepackage MyApp::Foo;use Moo;use MyApp::Types qw(MyType VarChar);has attribute => (is => 'ro',isa => MyType,);has string => (is => 'ro',isa => VarChar[25]);
DESCRIPTION
This module provides a possibility to build your own set of Moose-like types. These custom types can then be used to describe fields in Moo-based classes.
See MooX::Types::MooseLike::Base for a list of available base types. Its source also provides an example of how to build base types, along with both parameterizable and non-parameterizable.
FUNCTIONS
register_types
register_types( types, package, moose_namespace )
Install the given types within the package. This makes the types automatically exportable by adding them to @EXPORT_OK of the package. Types are expected to be an array ref where every type is of the following format:
{name => 'MyType',test => sub { check_the_value_somehow($_[0]) },message => sub { "$_[0] is not the type we want!" },subtype_of => 'SomeParentType', # Optionalfrom => 'Some::Parent::CoolTypes', # Optionalparameterizable => sub { ... }, # Optionalinflate => sub { ... }, # Optional}
A type can be declared with a reference (subtype_of) to some previously declared type. In this case the new type will inherit the behaviour of the referenced type.
The referenced type can come either from the same package or from a third party package:
MooX::Types::MooseLike::register_types([{name => 'GreaterThan10',subtype_of => 'Int',from => 'MooX::Types::MooseLike::Base',test => sub { $_[0] > 10 },message => sub { 'not greater than 10' },}], __PACKAGE__);MooX::Types::MooseLike::register_types([{name => 'Between10And20',subtype_of => 'GreaterThan10',from => __PACKAGE__,test => sub { $_[0] < 20 },message => sub { 'not an integer between 10 and 20' },}], __PACKAGE__);MooX::Types::MooseLike::register_types([{name => 'Between10And30',subtype_of => GreaterThan10(),test => sub { $_[0] < 30 },message => sub { 'not an integer between 10 and 30' },}], __PACKAGE__);
exception_message
exception_message( value, part_of_the_exception_string )
Helper function to be used in a type definition:
{...message => sub { return exception_message($_[0], 'a HashRef' },...}
In the event of <value> mismatching the type constraints it produces the message:
"<value> is not a HashRef!"
inflate_type
inflate_type( coderef )
Inflates the type to a Moose type. Requires Moose.
SEE ALSO
MooX::Types::MooseLike::Numeric - an example of building subtypes.
MooX::Types::SetObject - an example of building parameterized types.
MooX::Types::MooseLike::Email, MooX::Types::MooseLike::DateTime
Type::Tiny - another implementation of type constraints. Compatible with Moo, Moose and Mouse.
AUTHOR
mateu - Mateu X. Hunter (cpan:MATEU) <[email protected]>
CONTRIBUTORS
mst - Matt S. Trout (cpan:MSTROUT) <[email protected]>
Mithaldu - Christian Walde (cpan:MITHALDU) <[email protected]>
Matt Phillips (cpan:MATTP) <[email protected]>
Arthur Axel fREW Schmidt (cpan:FREW) <[email protected]>
Toby Inkster (cpan:TOBYINK) <[email protected]>
Graham Knop (cpan:HAARG) <[email protected]>
Dmitry Matrosov (cpan:AMIDOS) <[email protected]>
COPYRIGHT
Copyright (c) 2011-2015 the MooX::Types::MooseLike "AUTHOR" and
"CONTRIBUTORS" as listed above.
LICENSE
This library is free software and may be distributed under the same terms as perl itself.