diff options
Diffstat (limited to 'lib/MooseX/Meta')
-rw-r--r-- | lib/MooseX/Meta/TypeConstraint/Doctype.pm | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/MooseX/Meta/TypeConstraint/Doctype.pm b/lib/MooseX/Meta/TypeConstraint/Doctype.pm index cc48312..18dfd7c 100644 --- a/lib/MooseX/Meta/TypeConstraint/Doctype.pm +++ b/lib/MooseX/Meta/TypeConstraint/Doctype.pm @@ -84,6 +84,11 @@ has doctype => ( required => 1, ); +has maybe => ( + is => 'ro', + isa => 'Bool', +); + has '+parent' => ( default => sub { find_type_constraint('Ref') }, ); @@ -116,7 +121,10 @@ sub _validate_doctype { match_on_type $doctype => ( 'HashRef' => sub { - if (!find_type_constraint('HashRef')->check($data)) { + if ($self->maybe && !defined($data)) { + # ignore it + } + elsif (!find_type_constraint('HashRef')->check($data)) { $errors = $self->_format_error($data, $prefix); } else { @@ -146,7 +154,10 @@ sub _validate_doctype { } }, 'ArrayRef' => sub { - if (!find_type_constraint('ArrayRef')->check($data)) { + if ($self->maybe && !defined($data)) { + # ignore it + } + elsif (!find_type_constraint('ArrayRef')->check($data)) { $errors = $self->_format_error($data, $prefix); } else { |