X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FClass%2FImmutable%2FTrait.pm;h=7c4226002577f3be800b719ef7845f3ab3935881;hb=f4b86ac0e1fd7ff8a180f2f8332821170db5371e;hp=60f6832c7f76c4433edb2d9a32080024646b74f0;hpb=5a5fd3c07f028265393a6278993cb35e39b3e10f;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Class/Immutable/Trait.pm b/lib/Moose/Meta/Class/Immutable/Trait.pm index 60f6832..7c42260 100644 --- a/lib/Moose/Meta/Class/Immutable/Trait.pm +++ b/lib/Moose/Meta/Class/Immutable/Trait.pm @@ -4,8 +4,9 @@ use strict; use warnings; use Class::MOP; +use Scalar::Util qw( blessed ); -our $VERSION = '1.12'; +our $VERSION = '1.16'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -25,6 +26,21 @@ sub calculate_all_roles_with_inheritance { @{ $self->{__immutable}{calculate_all_roles_with_inheritance} ||= [ $self->$orig ] }; } +sub does_role { + shift; + my $self = shift; + my $role = shift; + + (defined $role) + || $self->throw_error("You must supply a role name to look for"); + + $self->{__immutable}{does_role} ||= { map { $_->name => 1 } $self->calculate_all_roles_with_inheritance }; + + my $name = blessed $role ? $role->name : $role; + + return $self->{__immutable}{does_role}{$name}; +} + 1; __END__