X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FTypeConstraint%2FUnion.pm;h=135fe791b9ababa99ac90bc1e8e3c9e996abc5d6;hb=db236a63c00371129c2254251aaa1408f044cd89;hp=4c3a424d90c4ab29ec46b1ff7123540856edc444;hpb=74397c13ad55fc865db34721aed512d4f605fadf;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/TypeConstraint/Union.pm b/lib/Moose/Meta/TypeConstraint/Union.pm index 4c3a424..135fe79 100644 --- a/lib/Moose/Meta/TypeConstraint/Union.pm +++ b/lib/Moose/Meta/TypeConstraint/Union.pm @@ -7,7 +7,9 @@ use metaclass; use Moose::Meta::TypeCoercion::Union; -our $VERSION = '0.75_01'; +use List::Util qw(first); + +our $VERSION = '1.10'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -18,7 +20,7 @@ __PACKAGE__->meta->add_attribute('type_constraints' => ( default => sub { [] } )); -sub new { +sub new { my ($class, %options) = @_; my $name = join '|' => sort { $a cmp $b } @@ -90,7 +92,13 @@ sub validate { $message .= ($message ? ' and ' : '') . $err if defined $err; } - return ($message . ' in (' . $self->name . ')') ; + return ($message . ' in (' . $self->name . ')') ; +} + +sub find_type_for { + my ($self, $value) = @_; + + return first { $_->check($value) } @{ $self->type_constraints }; } sub is_a_type_of { @@ -98,7 +106,7 @@ sub is_a_type_of { foreach my $type (@{$self->type_constraints}) { return 1 if $type->is_a_type_of($type_name); } - return 0; + return 0; } sub is_subtype_of { @@ -197,6 +205,12 @@ messages returned by the member type constraints. A type is considered equal if it is also a union type, and the two unions have the same member types. +=item B<< $constraint->find_type_for($value) >> + +This returns the first member type constraint for which C is +true, allowing you to determine which of the Union's member type constraints +a given value matches. + =item B<< $constraint->is_a_type_of($type_name_or_object) >> This returns true if any of the member type constraints return true @@ -216,9 +230,7 @@ as its parent. =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 for details on reporting bugs. =head1 AUTHOR @@ -226,7 +238,7 @@ Stevan Little Estevan@iinteractive.comE =head1 COPYRIGHT AND LICENSE -Copyright 2006-2009 by Infinity Interactive, Inc. +Copyright 2006-2010 by Infinity Interactive, Inc. L