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=dd2e60b779e8b382d1c35c8e0e147d79cd1116cb;hpb=b7ef2be4b4b814c7ef52b96cc33e7fb4581428ba;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Class/Immutable/Trait.pm b/lib/Moose/Meta/Class/Immutable/Trait.pm index dd2e60b..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 = '0.95'; +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__