X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FTypeConstraint%2FParameterizable.pm;h=0db81266993d290e0805e3e590915730043488f3;hb=d5f6cadef8d83deaf7dd95302908cd4f61aeab8a;hp=8487b02feed4668393b4afd67e5d418fce82d3e6;hpb=53cfaa0e28a3b97e9133e42c928667ee8ca0ee2c;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/TypeConstraint/Parameterizable.pm b/lib/Moose/Meta/TypeConstraint/Parameterizable.pm index 8487b02..0db8126 100644 --- a/lib/Moose/Meta/TypeConstraint/Parameterizable.pm +++ b/lib/Moose/Meta/TypeConstraint/Parameterizable.pm @@ -4,10 +4,6 @@ use strict; use warnings; use metaclass; -our $VERSION = '0.64'; -$VERSION = eval $VERSION; -our $AUTHORITY = 'cpan:STEVAN'; - use base 'Moose::Meta::TypeConstraint'; use Moose::Meta::TypeConstraint::Parameterized; use Moose::Util::TypeConstraints (); @@ -19,16 +15,16 @@ __PACKAGE__->meta->add_attribute('constraint_generator' => ( sub generate_constraint_for { my ($self, $type) = @_; - + return unless $self->has_constraint_generator; - + return $self->constraint_generator->($type->type_parameter) if $type->is_subtype_of($self->name); - + return $self->_can_coerce_constraint_from($type) if $self->has_coercion && $self->coercion->has_coercion_for_type($type->parent->name); - + return; } @@ -51,14 +47,16 @@ sub parameterize { my ($self, $type_parameter) = @_; my $contained_tc = $self->_parse_type_parameter($type_parameter); - + ## The type parameter should be a subtype of the parent's type parameter ## if there is one. - + if(my $parent = $self->parent) { if($parent->can('type_parameter')) { - $contained_tc->is_a_type_of($parent->type_parameter) - || Moose->throw_error("$type_parameter is not a subtype of ".$parent->type_parameter); + unless ( $contained_tc->is_a_type_of($parent->type_parameter) ) { + require Moose; + Moose->throw_error("$type_parameter is not a subtype of ".$parent->type_parameter); + } } } @@ -71,6 +69,7 @@ sub parameterize { ); } else { + require Moose; Moose->throw_error("The type parameter must be a Moose meta type"); } } @@ -78,51 +77,37 @@ sub parameterize { 1; +# ABSTRACT: Type constraints which can take a parameter (ArrayRef) + __END__ =pod -=head1 NAME - -Moose::Meta::TypeConstraint::Parameterizable - Higher Order type constraints for Moose - -=head1 METHODS - -=over 4 - -=item B +=head1 DESCRIPTION -=item B +This class represents a parameterizable type constraint. This is a +type constraint like C or C, that can be +parameterized and made more specific by specifying a contained +type. For example, instead of just an C of anything, you can +specify that is an C. -=item B +A parameterizable constraint should not be used as an attribute type +constraint. Instead, when parameterized it creates a +L which should be used. -=item B +=head1 INHERITANCE -Given a single type constraint or type constraint string, this method -parameterizes the type based on the given argument. +C is a subclass of +L. -=item B +=head1 METHODS -=back +This class is intentionally not documented because the API is +confusing and needs some work. =head1 BUGS -All complex software has bugs lurking in it, and this module is no -exception. If you find a bug please either email me, or add the bug -to cpan-RT. - -=head1 AUTHOR - -Stevan Little Estevan@iinteractive.comE - -=head1 COPYRIGHT AND LICENSE - -Copyright 2006-2008 by Infinity Interactive, Inc. - -L - -This library is free software; you can redistribute it and/or modify -it under the same terms as Perl itself. +See L for details on reporting bugs. =cut