Fix is_subtype_of to handle not-yet-defined role
[gitmo/Moose.git] / lib / Moose / Meta / TypeConstraint / Registry.pm
index edbc126..59105d1 100644 (file)
@@ -6,26 +6,23 @@ use warnings;
 use metaclass;
 
 use Scalar::Util 'blessed';
-use Carp         'confess'; # FIXME Moose->throw_error
-
-our $VERSION   = '0.65';
-$VERSION = eval $VERSION;
-our $AUTHORITY = 'cpan:STEVAN';
 
 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',
+    Class::MOP::_definition_context(),
 ));
 
 __PACKAGE__->meta->add_attribute('type_constraints' => (
     reader  => 'type_constraints',
-    default => sub { {} }
+    default => sub { {} },
+    Class::MOP::_definition_context(),
 ));
 
-sub new { 
+sub new {
     my $class = shift;
     my $self  = $class->_new(@_);
     return $self;
@@ -38,14 +35,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;
 }
 
@@ -60,73 +61,85 @@ sub find_type_constraint {
 
 1;
 
+# ABSTRACT: registry for type constraints
+
 __END__
 
 
 =pod
 
-=head1 NAME
+=head1 DESCRIPTION
 
-Moose::Meta::TypeConstraint::Registry - registry for type constraints
+This class is a registry that maps type constraint names to
+L<Moose::Meta::TypeConstraint> objects.
 
-=head1 DESCRIPTION
+Currently, it is only used internally by
+L<Moose::Util::TypeConstraints>, which creates a single global
+registry.
+
+=head1 INHERITANCE
 
-This module is currently only use internally by L<Moose::Util::TypeConstraints>. 
-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).
+C<Moose::Meta::TypeConstraint::Registry> is a subclass of
+L<Class::MOP::Object>.
 
 =head1 METHODS
 
 =over 4
 
-=item B<meta>
+=item B<< Moose::Meta::TypeConstraint::Registry->new(%options) >>
 
-=item B<new>
+This creates a new registry object based on the provided C<%options>:
 
-=item B<get_parent_registry>
+=over 8
 
-=item B<set_parent_registry ($registry)>
-    
-=item B<has_parent_registry>
+=item * parent_registry
 
-=item B<type_constraints>
+This is an optional L<Moose::Meta::TypeConstraint::Registry>
+object.
 
-=item B<has_type_constraint ($type_name)>
+=item * type_constraints
 
-=item B<get_type_constraint ($type_name)>
+This is hash reference of type names to type objects. This is
+optional. Constraints can be added to the registry after it is
+created.
 
-Returns a type constraint object from the registry by name. Will return
-false if the supplied type name cannot be found.
+=back
 
-=item B<add_type_constraint ($type)>
+=item B<< $registry->get_parent_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<Moose::Meta::TypeConstraint>
+Returns the registry's parent registry, if it has one.
 
-=item B<find_type_constraint ($type_name)>
+=item B<< $registry->has_parent_registry >>
 
-=back
+Returns true if the registry has a parent.
 
-=head1 BUGS
+=item B<< $registry->set_parent_registry($registry) >>
+
+Sets the parent registry.
+
+=item B<< $registry->get_type_constraint($type_name) >>
+
+This returns the L<Moose::Meta::TypeConstraint> object from the
+registry for the given name, if one exists.
 
-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.
+=item B<< $registry->has_type_constraint($type_name) >>
 
-=head1 AUTHOR
+Returns true if the registry has a type of the given name.
 
-Stevan Little E<lt>stevan@iinteractive.comE<gt>
+=item B<< $registry->add_type_constraint($type) >>
 
-=head1 COPYRIGHT AND LICENSE
+Adds a new L<Moose::Meta::TypeConstraint> object to the registry.
 
-Copyright 2006-2008 by Infinity Interactive, Inc.
+=item B<< $registry->find_type_constraint($type_name) >>
 
-L<http://www.iinteractive.com>
+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
 
-This library is free software; you can redistribute it and/or modify
-it under the same terms as Perl itself.
+See L<Moose/BUGS> for details on reporting bugs.
 
 =cut