Moose::Meta::TypeConstraint::Registry - registry for type constraints


Moose documentation Contained in the Moose distribution.

Index


Code Index:

NAME

Top

Moose::Meta::TypeConstraint::Registry - registry for type constraints

VERSION

Top

version 2.0010

DESCRIPTION

Top

This class is a registry that maps type constraint names to Moose::Meta::TypeConstraint objects.

Currently, it is only used internally by Moose::Util::TypeConstraints, which creates a single global registry.

INHERITANCE

Top

Moose::Meta::TypeConstraint::Registry is a subclass of Class::MOP::Object.

METHODS

Top

Moose::Meta::TypeConstraint::Registry->new(%options)

This creates a new registry object based on the provided %options:

* parent_registry

This is an optional Moose::Meta::TypeConstraint::Registry object.

* 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.

$registry->get_parent_registry

Returns the registry's parent registry, if it has one.

$registry->has_parent_registry

Returns true if the registry has a parent.

$registry->set_parent_registry($registry)

Sets the parent registry.

$registry->get_type_constraint($type_name)

This returns the Moose::Meta::TypeConstraint object from the registry for the given name, if one exists.

$registry->has_type_constraint($type_name)

Returns true if the registry has a type of the given name.

$registry->add_type_constraint($type)

Adds a new Moose::Meta::TypeConstraint object to the registry.

$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.

BUGS

Top

See BUGS in Moose for details on reporting bugs.

AUTHOR

Top

Stevan Little <stevan@iinteractive.com>

COPYRIGHT AND LICENSE

Top


Moose documentation Contained in the Moose distribution.

package Moose::Meta::TypeConstraint::Registry;
BEGIN {
  $Moose::Meta::TypeConstraint::Registry::AUTHORITY = 'cpan:STEVAN';
}
BEGIN {
  $Moose::Meta::TypeConstraint::Registry::VERSION = '2.0010';
}

use strict;
use warnings;
use metaclass;

use Scalar::Util 'blessed';

use base 'Class::MOP::Object';

__PACKAGE__->meta->add_attribute('parent_registry' => (
    reader    => 'get_parent_registry',
    writer    => 'set_parent_registry',
    predicate => 'has_parent_registry',
));

__PACKAGE__->meta->add_attribute('type_constraints' => (
    reader  => 'type_constraints',
    default => sub { {} }
));

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') ) {
        require Moose;
        Moose->throw_error("No type supplied / type is not a valid type constraint");
    }

    $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__