Support is => 'bare' for compatibility
[gitmo/Mouse.git] / lib / Mouse / Meta / Role.pm
index f7ebd21..2ea38e2 100644 (file)
@@ -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,12 +103,12 @@ 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};
                 unless ($classname->can($dstname)) {
-                    *{"${classname}::${dstname}"} = *$role_function;
+                    *{"${classname}::${dstname}"} = \&$role_function;
                 }
             }
         }
@@ -192,7 +199,7 @@ sub combine_apply {
                 if ($args{alias} && $args{alias}->{$name}) {
                     my $dstname = $args{alias}->{$name};
                     unless ($classname->can($dstname)) {
-                        *{"${classname}::${dstname}"} = *$role_function;
+                        *{"${classname}::${dstname}"} = \&$role_function;
                     }
                 }
             }