fallback => 1;
use Scalar::Util qw(blessed refaddr);
+use Sub::Name qw(subname);
use base qw(Class::MOP::Object);
-our $VERSION = '0.75_01';
+our $VERSION = '0.96';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
Moose->throw_error("Cannot coerce without a type coercion");
}
+ return $_[0] if $self->check($_[0]);
+
return $coercion->coerce(@_);
}
}
}
+sub assert_valid {
+ my ($self, $value) = @_;
+
+ my $error = $self->validate($value);
+ return 1 if ! defined $error;
+
+ require Moose;
+ Moose->throw_error($error);
+}
+
sub get_message {
my ($self, $value) = @_;
if (my $msg = $self->message) {
return $msg->($value);
}
else {
- $value = (defined $value ? overload::StrVal($value) : 'undef');
+ $value = (defined $value ? overload::StrVal($value) : 'undef');
return "Validation failed for '" . $self->name . "' failed with value $value";
- }
+ }
}
## type predicates ...
if ( $check == $null_constraint ) {
return $optimized_parent;
} else {
- return Class::MOP::subname($self->name, sub {
+ return subname($self->name, sub {
return undef unless $optimized_parent->($_[0]);
my (@args) = @_;
local $_ = $args[0];
# general case, check all the constraints, from the first parent to ourselves
my @checks = @parents;
push @checks, $check if $check != $null_constraint;
- return Class::MOP::subname($self->name => sub {
+ return subname($self->name => sub {
my (@args) = @_;
local $_ = $args[0];
foreach my $check (@checks) {
return $check if $check == $null_constraint; # Item, Any
- return Class::MOP::subname($self->name => sub {
+ return subname($self->name => sub {
my (@args) = @_;
local $_ = $args[0];
$check->(@args);
=head1 DESCRIPTION
This class represents a single type constraint. Moose's built-in type
-constraints, as well as constraints you define, are all store in a
+constraints, as well as constraints you define, are all stored in a
L<Moose::Meta::TypeConstraint::Registry> object as objects of this
class.
C<< $self->get_message($value) >> internally to generate an error
message.
+=item B<< $constraint->assert_valid($value) >>
+
+Like C<check> and C<validate>, this method checks whether C<$value> is
+valid under the constraint. If it is, it will return true. If it is not,
+an exception will be thrown with the results of
+C<< $self->get_message($value) >>.
+
=item B<< $constraint->name >>
Returns the type's name, as provided to the constructor.
=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<Moose/BUGS> for details on reporting bugs.
=head1 AUTHOR
=head1 COPYRIGHT AND LICENSE
-Copyright 2006-2009 by Infinity Interactive, Inc.
+Copyright 2006-2010 by Infinity Interactive, Inc.
L<http://www.iinteractive.com>