Add calculate_all_roles() to Meta::Class/Meta::Role
gfx [Mon, 19 Oct 2009 06:08:29 +0000 (15:08 +0900)]
lib/Mouse/Meta/Class.pm
lib/Mouse/Meta/Role.pm

index 7b40497..167f4b9 100644 (file)
@@ -44,6 +44,13 @@ sub is_anon_class{
 
 sub roles { $_[0]->{roles} }
 
+sub calculate_all_roles {
+    my $self = shift;
+    my %seen;
+    return grep { !$seen{ $_->name }++ }
+           map  { $_->calculate_all_roles } @{ $self->roles };
+}
+
 sub superclasses {
     my $self = shift;
 
index 9c56aab..d8d4053 100644 (file)
@@ -35,6 +35,13 @@ sub is_anon_role{
 
 sub get_roles { $_[0]->{roles} }
 
+sub calculate_all_roles {
+    my $self = shift;
+    my %seen;
+    return grep { !$seen{ $_->name }++ }
+           ($self, map  { $_->calculate_all_roles } @{ $self->get_roles });
+}
+
 sub get_required_method_list{
     return @{ $_[0]->{required_methods} };
 }