package Moose::Meta::TypeConstraint::Registry; our $VERSION = '2.2207'; use strict; use warnings; use metaclass; use Scalar::Util 'blessed'; use parent 'Class::MOP::Object'; use Moose::Util 'throw_exception'; __PACKAGE__->meta->add_attribute('parent_registry' => ( reader => 'get_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 { {} }, Class::MOP::_definition_context(), )); sub new { my $class = shift; my $self = $class->_new(@_); return $self; } sub has_type_constraint { my ($self, $type_name) = @_; ($type_name and exists $self->type_constraints->{$type_name}) ? 1 : 0 } sub get_type_constraint { my ($self, $type_name) = @_; return unless defined $type_name; $self->type_constraints->{$type_name} } sub add_type_constraint { my ($self, $type) = @_; unless ( $type && blessed $type && $type->isa('Moose::Meta::TypeConstraint') ) { throw_exception( InvalidTypeConstraint => registry_object => $self, type => $type ); } $self->type_constraints->{$type->name} = $type; } sub find_type_constraint { my ($self, $type_name) = @_; return $self->get_type_constraint($type_name) if $self->has_type_constraint($type_name); return $self->get_parent_registry->find_type_constraint($type_name) if $self->has_parent_registry; return; } 1; # ABSTRACT: registry for type constraints __END__ =pod =encoding UTF-8 =head1 NAME Moose::Meta::TypeConstraint::Registry - registry for type constraints =head1 VERSION version 2.2207 =head1 DESCRIPTION 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 =head2 Moose::Meta::TypeConstraint::Registry->new(%options) This creates a new registry object based on the provided C<%options>: =over 4 =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 =head2 $registry->get_parent_registry Returns the registry's parent registry, if it has one. =head2 $registry->has_parent_registry Returns true if the registry has a parent. =head2 $registry->set_parent_registry($registry) Sets the parent registry. =head2 $registry->get_type_constraint($type_name) This returns the L object from the registry for the given name, if one exists. =head2 $registry->has_type_constraint($type_name) Returns true if the registry has a type of the given name. =head2 $registry->add_type_constraint($type) Adds a new L object to the registry. =head2 $registry->find_type_constraint($type_name) 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. =head1 BUGS See L for details on reporting bugs. =head1 AUTHORS =over 4 =item * Stevan Little =item * Dave Rolsky =item * Jesse Luehrs =item * Shawn M Moore =item * יובל קוג'מן (Yuval Kogman) =item * Karen Etheridge =item * Florian Ragwitz =item * Hans Dieter Pearcey =item * Chris Prather =item * Matt S Trout =back =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2006 by Infinity Interactive, Inc. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut