summaryrefslogtreecommitdiffstats
path: root/lib/MooseX/Meta/TypeConstraint/Doctype.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/MooseX/Meta/TypeConstraint/Doctype.pm')
-rw-r--r--lib/MooseX/Meta/TypeConstraint/Doctype.pm15
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 {