X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FTypeConstraint%2FUnion.pm;h=0ee81659dcc94141c869b168598c41db0f1aa33d;hb=c05704596921f27fba4b1148dfed3ddd0d15795e;hp=b604fe9b11a2093ba65845361037408879e8f16e;hpb=a93d14d12227126813af4aa7f1caffd065820d6a;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/TypeConstraint/Union.pm b/lib/Moose/Meta/TypeConstraint/Union.pm index b604fe9..0ee8165 100644 --- a/lib/Moose/Meta/TypeConstraint/Union.pm +++ b/lib/Moose/Meta/TypeConstraint/Union.pm @@ -29,7 +29,7 @@ sub new { %options, ); - $self->_set_constraint(sub { $self->check($_[0]) }); + $self->_set_constraint( $self->_compiled_type_constraint ); return $self; } @@ -128,9 +128,16 @@ sub equals { return @other_constraints == 0; } -sub parents { +sub parent { my $self = shift; - $self->type_constraints; + + my ($first, @rest) = @{ $self->type_constraints }; + + for my $parent ( $first->_collect_all_parents ) { + return $parent if all { $_->is_a_type_of($parent) } @rest; + } + + return; } sub validate { @@ -229,9 +236,9 @@ attribute is a L object. This returns the array reference of C provided to the constructor. -=item B<< $constraint->parents >> +=item B<< $constraint->parent >> -This returns the same constraint as the C method. +This returns the nearest common ancestor of all the components of the union. =item B<< $constraint->check($value) >>