accept fully named args to Class::MOP::Method::wrap
Yuval Kogman [Fri, 8 Aug 2008 22:23:25 +0000 (22:23 +0000)]
lib/Class/MOP.pm
lib/Class/MOP/Method.pm
t/031_method_modifiers.t

index 33ad8ce..a0731b3 100644 (file)
@@ -566,9 +566,12 @@ Class::MOP::Method->meta->add_attribute(
 );
 
 Class::MOP::Method->meta->add_method('wrap' => sub {
-    my $class   = shift;
-    my $code    = shift;
-    my %options = @_;
+    my ( $class, @args ) = @_;
+
+    unshift @args, 'body' if @args % 2 == 1;
+
+    my %options = @args;
+    my $code = $options{body};
 
     ('CODE' eq ref($code))
         || confess "You must supply a CODE reference to bless, not (" . ($code || 'undef') . ")";
@@ -577,7 +580,7 @@ Class::MOP::Method->meta->add_method('wrap' => sub {
         || confess "You must supply the package_name and name parameters";
 
     # return the new object
-    $class->meta->new_object(body => $code, %options);
+    $class->meta->new_object(%options);
 });
 
 Class::MOP::Method->meta->add_method('clone' => sub {
index a9b93e1..76167fe 100644 (file)
@@ -29,7 +29,12 @@ before spending too much time chasing this one down.
 # construction
 
 sub wrap {
-    my ( $class, $code, %params ) = @_;
+    my ( $class, @args ) = @_;
+
+    unshift @args, 'body' if @args % 2 == 1;
+
+    my %params = @args;
+    my $code = $params{body};
 
     ('CODE' eq ref($code))
         || confess "You must supply a CODE reference to bless, not (" . ($code || 'undef') . ")";
index d2b695d..8b42875 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
        my $trace = '';
 
        my $method = Class::MOP::Method->wrap(
-           sub { $trace .= 'primary' },
+           body         => sub { $trace .= 'primary' },
            package_name => 'main',
            name         => '__ANON__',
        );