X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FTypeConstraint%2FRegistry.pm;h=c26ec269769097d07a610bb284187f8d9eb7430d;hb=8b5074ce1a5038824f1e1177cd00d1bcfec5a9fb;hp=dc27c95d35425bcb0c41ba5c0757249e33507f02;hpb=722c9bcbe9633bbebe5b71773b8d8e574385b604;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/TypeConstraint/Registry.pm b/lib/Moose/Meta/TypeConstraint/Registry.pm index dc27c95..c26ec26 100644 --- a/lib/Moose/Meta/TypeConstraint/Registry.pm +++ b/lib/Moose/Meta/TypeConstraint/Registry.pm @@ -6,9 +6,8 @@ use warnings; use metaclass; use Scalar::Util 'blessed'; -use Carp 'confess'; # FIXME Moose->throw_error -our $VERSION = '0.71'; +our $VERSION = '0.97'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -16,8 +15,8 @@ use base 'Class::MOP::Object'; __PACKAGE__->meta->add_attribute('parent_registry' => ( reader => 'get_parent_registry', - writer => 'set_parent_registry', - predicate => 'has_parent_registry', + writer => 'set_parent_registry', + predicate => 'has_parent_registry', )); __PACKAGE__->meta->add_attribute('type_constraints' => ( @@ -25,7 +24,7 @@ __PACKAGE__->meta->add_attribute('type_constraints' => ( default => sub { {} } )); -sub new { +sub new { my $class = shift; my $self = $class->_new(@_); return $self; @@ -38,14 +37,18 @@ sub has_type_constraint { sub get_type_constraint { my ($self, $type_name) = @_; - return unless defined $type_name; + return unless defined $type_name; $self->type_constraints->{$type_name} } sub add_type_constraint { my ($self, $type) = @_; - confess("No type supplied / type is not a valid type constraint") - unless ($type && blessed $type && $type->isa('Moose::Meta::TypeConstraint')); + + unless ( $type && blessed $type && $type->isa('Moose::Meta::TypeConstraint') ) { + require Moose; + Moose->throw_error("No type supplied / type is not a valid type constraint"); + } + $self->type_constraints->{$type->name} = $type; } @@ -71,50 +74,77 @@ Moose::Meta::TypeConstraint::Registry - registry for type constraints =head1 DESCRIPTION -This module is currently only use internally by L. -It can be used to create your own private type constraint registry as well, but -the details of that are currently left as an exercise to the reader. (One hint: -You can use the 'parent_registry' feature to connect your private version with the -base Moose registry and base Moose types will automagically be found too). +This class is a registry that maps type constraint names to +L objects. + +Currently, it is only used internally by +L, which creates a single global +registry. + +=head1 INHERITANCE + +C is a subclass of +L. =head1 METHODS =over 4 -=item B +=item B<< Moose::Meta::TypeConstraint::Registry->new(%options) >> + +This creates a new registry object based on the provided C<%options>: + +=over 8 + +=item * parent_registry + +This is an optional L +object. + +=item * type_constraints + +This is hash reference of type names to type objects. This is +optional. Constraints can be added to the registry after it is +created. + +=back + +=item B<< $registry->get_parent_registry >> + +Returns the registry's parent registry, if it has one. + +=item B<< $registry->has_parent_registry >> + +Returns true if the registry has a parent. -=item B +=item B<< $registry->set_parent_registry($registry) >> -=item B +Sets the parent registry. -=item B - -=item B +=item B<< $registry->get_type_constraint($type_name) >> -=item B +This returns the L object from the +registry for the given name, if one exists. -=item B +=item B<< $registry->has_type_constraint($type_name) >> -=item B +Returns true if the registry has a type of the given name. -Returns a type constraint object from the registry by name. Will return -false if the supplied type name cannot be found. +=item B<< $registry->add_type_constraint($type) >> -=item B +Adds a new L object to the registry. -Adds a type constraint object to the registry. Will throw an exception if -no type is supplied, or the supplied object does not inherit from -L +=item B<< $registry->find_type_constraint($type_name) >> -=item B +This method looks in the current registry for the named type. If the +type is not found, then this method will look in the registry's +parent, if it has one. =back =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. +See L for details on reporting bugs. =head1 AUTHOR @@ -122,7 +152,7 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2006-2009 by Infinity Interactive, Inc. +Copyright 2006-2010 by Infinity Interactive, Inc. L