use base qw(Class::MOP::Object);
-our $VERSION = '0.60';
+our $VERSION = '0.65';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
sub new {
my $class = shift;
- my $self = $class->_new(@_);
+ my ($first, @rest) = @_;
+ my %args = ref $first ? %$first : $first ? ($first, @rest) : ();
+ $args{name} = $args{name} ? "$args{name}" : "__ANON__";
+
+ my $self = $class->_new(%args);
$self->compile_type_constraint()
unless $self->_has_compiled_type_constraint;
return $self;
}
+
+
sub coerce { ((shift)->coercion || Moose->throw_error("Cannot coerce without a type coercion"))->coerce(@_) }
-sub check { $_[0]->_compiled_type_constraint->($_[1]) ? 1 : undef }
+
+sub check {
+ my ($self, @args) = @_;
+ my $constraint_subref = $self->_compiled_type_constraint;
+ return $constraint_subref->(@args) ? 1 : undef;
+}
+
sub validate {
my ($self, $value) = @_;
if ($self->_compiled_type_constraint->($value)) {
} else {
return Class::MOP::subname($self->name, sub {
return undef unless $optimized_parent->($_[0]);
- local $_ = $_[0];
- $check->($_[0]);
+ my (@args) = @_;
+ local $_ = $args[0];
+ $check->(@args);
});
}
} else {
my @checks = @parents;
push @checks, $check if $check != $null_constraint;
return Class::MOP::subname($self->name => sub {
- local $_ = $_[0];
+ my (@args) = @_;
+ local $_ = $args[0];
foreach my $check (@checks) {
- return undef unless $check->($_[0]);
+ return undef unless $check->(@args);
}
return 1;
});
return $check if $check == $null_constraint; # Item, Any
return Class::MOP::subname($self->name => sub {
- local $_ = $_[0];
- $check->($_[0]);
+ my (@args) = @_;
+ local $_ = $args[0];
+ $check->(@args);
});
}
=item B<parent>
-This type's parent type.
+This type's parent type.
=item B<has_parent>
=item B<parents>
+Synonym for C<parent>.
+
=item B<constraint>
+Returns this type's constraint. This is the value of C<where> provided
+when defining a type.
+
=item B<has_message>
+Returns true if this type has a message.
+
=item B<message>
+Returns this type's message.
+
=item B<get_message ($value)>
+Generate message for $value.
+
=item B<has_coercion>
+Returns true if this type has a coercion.
+
=item B<coercion>
+Returns this type's L<Moose::Meta::TypeCoercion> if one exists.
+
=item B<hand_optimized_type_constraint>
=item B<has_hand_optimized_type_constraint>