fix RT#44429 after discussion on the mailing list
[gitmo/Moose.git] / lib / Moose / Util.pm
index 3637df1..67b33ad 100644 (file)
@@ -7,7 +7,7 @@ use Sub::Exporter;
 use Scalar::Util 'blessed';
 use Class::MOP   0.60;
 
-our $VERSION   = '0.72_01';
+our $VERSION   = '0.73';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
@@ -80,16 +80,10 @@ sub apply_all_roles {
 
     my $roles = Data::OptList::mkopt( [@_] );
 
-    my $meta = ( blessed $applicant ? $applicant : find_meta($applicant) );
-
-    foreach my $role_spec (@$roles) {
-        Class::MOP::load_class( $role_spec->[0] );
-    }
-
     foreach my $role (@$roles) {
-        unless ( $role->[0]->can('meta')
-            && $role->[0]->meta->isa('Moose::Meta::Role') ) {
+        my $meta = Class::MOP::load_class( $role->[0] );
 
+        unless ($meta->isa('Moose::Meta::Role') ) {
             require Moose;
             Moose->throw_error( "You can only consume roles, "
                     . $role->[0]
@@ -97,9 +91,12 @@ sub apply_all_roles {
         }
     }
 
+    my $meta = ( blessed $applicant ? $applicant : find_meta($applicant) );
+
     if ( scalar @$roles == 1 ) {
         my ( $role, $params ) = @{ $roles->[0] };
-        $role->meta->apply( $meta, ( defined $params ? %$params : () ) );
+        my $role_meta = Class::MOP::class_of($role);
+        $role_meta->apply( $meta, ( defined $params ? %$params : () ) );
     }
     else {
         Moose::Meta::Role->combine( @$roles )->apply($meta);