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=52009ed3aba005f38700dfc5df7eea55d4756401;hpb=ae7820b1b884344a7ee90d94b484ca46459eb7b1;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Class/Immutable/Trait.pm b/lib/Moose/Meta/Class/Immutable/Trait.pm index 52009ed..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.06'; +our $VERSION = '1.16'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -19,6 +20,27 @@ sub calculate_all_roles { @{ $self->{__immutable}{calculate_all_roles} ||= [ $self->$orig ] }; } +sub calculate_all_roles_with_inheritance { + my $orig = shift; + my $self = shift; + @{ $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__