X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FMeta%2FRole.pm;h=27dc2eb1253deb2b226a75386bb40b0c06f1a9e1;hb=8c063f8ed8d83d893e4571a3fb64c664e40bdd3e;hp=29d10fcaeac40dd538966b7a243d278755d3878a;hpb=3eb89f709f04907580b508f821d6be2316fcb65f;p=gitmo%2FMoose.git diff --git a/lib/Moose/Meta/Role.pm b/lib/Moose/Meta/Role.pm index 29d10fc..27dc2eb 100644 --- a/lib/Moose/Meta/Role.pm +++ b/lib/Moose/Meta/Role.pm @@ -9,7 +9,7 @@ use Scalar::Util 'blessed'; use Carp 'confess'; use Devel::GlobalDestruction 'in_global_destruction'; -our $VERSION = '1.01'; +our $VERSION = '1.03'; $VERSION = eval $VERSION; our $AUTHORITY = 'cpan:STEVAN'; @@ -20,7 +20,9 @@ use Moose::Meta::Role::Method::Required; use Moose::Meta::Role::Method::Conflicting; use Moose::Util qw( ensure_all_roles ); -use base 'Class::MOP::Module', 'Class::MOP::Mixin::HasAttributes'; +use base 'Class::MOP::Module', + 'Class::MOP::Mixin::HasAttributes', + 'Class::MOP::Mixin::HasMethods'; ## ------------------------------------------------------------------ ## NOTE: @@ -197,6 +199,9 @@ sub add_attribute { my $class = ref $_[0]; Moose->throw_error( "Cannot add a $class as an attribute to a role" ); } + elsif (!blessed($_[0]) && defined($_[0]) && $_[0] =~ /^\+(.*)/) { + Moose->throw_error( "has '+attr' is not supported in roles" ); + } return $self->SUPER::add_attribute(@_); } @@ -399,7 +404,7 @@ sub alias_method { ## ------------------------------------------------------------------ sub apply { - my ($self, $other, @args) = @_; + my ($self, $other, %args) = @_; (blessed($other)) || Moose->throw_error("You must pass in an blessed instance"); @@ -416,7 +421,7 @@ sub apply { } Class::MOP::load_class($application_class); - return $application_class->new(@args)->apply($self, $other); + return $application_class->new(%args)->apply($self, $other, \%args); } sub composition_class_roles { }