bump version to 0.70
[gitmo/Moose.git] / lib / Moose / Meta / Role / Application / ToClass.pm
index c326693..0eb0bf3 100644 (file)
@@ -4,9 +4,10 @@ use strict;
 use warnings;
 use metaclass;
 
-use Scalar::Util    'blessed';
+use Moose::Util  'english_list';
+use Scalar::Util 'blessed';
 
-our $VERSION   = '0.62';
+our $VERSION   = '0.70';
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';
 
@@ -32,6 +33,10 @@ sub check_role_exclusions {
 
 sub check_required_methods {
     my ($self, $role, $class) = @_;
+
+    my @missing;
+    my @is_attr;
+
     # NOTE:
     # we might need to move this down below the
     # the attributes so that we can require any
@@ -43,35 +48,30 @@ sub check_required_methods {
         if (!$class->find_method_by_name($required_method_name)) {
             
             next if $self->is_aliased_method($required_method_name);
-            
-            $class->throw_error("'" . $role->name . "' requires the method '$required_method_name' " .
-                    "to be implemented by '" . $class->name . "'");
-        }
-        else {
-            # NOTE:
-            # we need to make sure that the method is
-            # not a method modifier, because those do
-            # not satisfy the requirements ...
-            my $method = $class->find_method_by_name($required_method_name);
-
-            # check if it is a generated accessor ...
-            (!$method->isa('Class::MOP::Method::Accessor'))
-                || $class->throw_error("'" . $role->name . "' requires the method '$required_method_name' " .
-                           "to be implemented by '" . $class->name . "', the method is only an attribute accessor");
-
-            # NOTE:
-            # All other tests here have been removed, they were tests
-            # for overriden methods and before/after/around modifiers.
-            # But we realized that for classes any overriden or modified
-            # methods would be backed by a real method of that name
-            # (and therefore meet the requirement). And for roles, the
-            # overriden and modified methods are "in statis" and so would
-            # not show up in this test anyway (and as a side-effect they
-            # would not fufill the requirement, which is exactly what we
-            # want them to do anyway).
-            # - SL
+
+            push @missing, $required_method_name;
         }
     }
+
+    return unless @missing;
+
+    my $error = '';
+
+    if (@missing) {
+        my $noun = @missing == 1 ? 'method' : 'methods';
+
+        my $list
+            = Moose::Util::english_list( map { q{'} . $_ . q{'} } @missing );
+
+        $error
+            .= q{'}
+            . $role->name
+            . "' requires the $noun $list "
+            . "to be implemented by '"
+            . $class->name . q{'};
+    }
+
+    $class->throw_error($error);
 }
 
 sub check_required_attributes {
@@ -108,7 +108,7 @@ sub apply_methods {
                 next;
             }
             else {
-                # add it, although it could be overriden
+                # add it, although it could be overridden
                 $class->add_method(
                     $method_name,
                     $role->get_method($method_name)
@@ -218,7 +218,7 @@ Stevan Little E<lt>stevan@iinteractive.comE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright 2006-2008 by Infinity Interactive, Inc.
+Copyright 2006-2009 by Infinity Interactive, Inc.
 
 L<http://www.iinteractive.com>