Make $role->get_method_list() include meta() (Moose 0.90 feature)
[gitmo/Mouse.git] / lib / Mouse / Meta / Role.pm
index 13a27d8..4910f72 100644 (file)
@@ -2,6 +2,7 @@ package Mouse::Meta::Role;
 use strict;
 use warnings;
 use Carp 'confess';
+
 use Mouse::Util qw(version authority identifier);
 
 do {
@@ -64,12 +65,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|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 +79,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 +102,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};