X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FRole.pm;h=2ea38e237658e7a07963b8e9246705e405f27102;hb=11d415286701d3b51e517cb6826138808967cb89;hp=13a27d8f46e3e0709f84fb087efe1ede7062df09;hpb=bded4514c62681d1c38503835c30a6b76b8b7c80;p=gitmo%2FMouse.git diff --git a/lib/Mouse/Meta/Role.pm b/lib/Mouse/Meta/Role.pm index 13a27d8..2ea38e2 100644 --- a/lib/Mouse/Meta/Role.pm +++ b/lib/Mouse/Meta/Role.pm @@ -2,6 +2,8 @@ package Mouse::Meta::Role; use strict; use warnings; use Carp 'confess'; + +use Mouse::Meta::Attribute; use Mouse::Util qw(version authority identifier); do { @@ -49,7 +51,7 @@ sub add_attribute { my $self = shift; my $name = shift; my $spec = shift; - $self->{attributes}->{$name} = $spec; + $self->{attributes}->{$name} = Mouse::Meta::Attribute->new($name, %$spec); } sub has_attribute { exists $_[0]->{attributes}->{$_[1]} } @@ -64,12 +66,13 @@ sub get_method_list { no strict 'refs'; # Get all the CODE symbol table entries my @functions = - grep !/^(?:has|with|around|before|after|blessed|extends|confess|excludes|meta|requires)$/, + grep !/^(?:has|with|around|before|after|augment|inner|override|super|blessed|extends|confess|excludes|meta|requires)$/, grep { defined &{"${name}::$_"} } keys %{"${name}::"}; wantarray ? @functions : \@functions; } +# Moose uses Application::ToInstance, Application::ToClass, Application::ToRole sub apply { my $self = shift; my $selfname = $self->name; @@ -77,6 +80,10 @@ sub apply { my $classname = $class->name; my %args = @_; + if ($class->isa('Mouse::Object')) { + Carp::croak('Mouse does not support Application::ToInstance yet'); + } + if ($class->isa('Mouse::Meta::Class')) { for my $name (@{$self->{required_methods}}) { unless ($classname->can($name)) { @@ -96,7 +103,7 @@ sub apply { # XXX what's Moose's behavior? #next; } else { - *$class_function = *$role_function; + *{$class_function} = \&{$role_function}; } if ($args{alias} && $args{alias}->{$name}) { my $dstname = $args{alias}->{$name};