X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FUtil.pm;h=67b33ad207db9e732a75b8977e44d2bde4c224cb;hb=c2685d2054e3f63cf38fca4fad1074b4a2e5be83;hp=3637df1bc02fb10660a9e121c5e74ddb86ec5478;hpb=baf46b9edc7dc3665c7eaf9d1684b157efb09e1a;p=gitmo%2FMoose.git diff --git a/lib/Moose/Util.pm b/lib/Moose/Util.pm index 3637df1..67b33ad 100644 --- a/lib/Moose/Util.pm +++ b/lib/Moose/Util.pm @@ -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);