fix inflating method modifiers applied to multiple methods
Graham Knop [Fri, 7 Jun 2013 15:34:27 +0000 (10:34 -0500)]
lib/Moo/HandleMoose.pm
xt/moose-method-modifiers.t

index 1918522..5c763e8 100644 (file)
@@ -179,7 +179,8 @@ sub inject_real_metaclass_for {
     $meta->add_required_methods(@{$info->{requires}});
     foreach my $modifier (@{$info->{modifiers}}) {
       my ($type, @args) = @$modifier;
-      $meta->${\"add_${type}_method_modifier"}(@args);
+      my $code = pop @args;
+      $meta->${\"add_${type}_method_modifier"}($_, $code) for @args;
     }
   } else {
     foreach my $attr (@attrs) {
index 2d49a8b..b90ec88 100644 (file)
@@ -1,8 +1,6 @@
 use strictures 1;
 use Test::More;
 
-use Moo::HandleMoose;
-
 {
    package ModifyFoo;
    use Moo::Role;
@@ -36,4 +34,28 @@ ok($ModifyFoo::before_ran, 'before ran');
 ok($ModifyFoo::after_ran, 'after ran');
 ok($ModifyFoo::around_ran, 'around ran');
 
+{
+  package ModifyMultiple;
+  use Moo::Role;
+  our $before = 0;
+
+  before 'foo', 'bar' => sub {
+    $before++;
+  };
+
+  package Baz;
+  use Moose;
+  with 'ModifyMultiple';
+
+  sub foo {}
+  sub bar {}
+}
+
+my $baz = Baz->new;
+my $pre = $ModifyMultiple::before;
+$baz->foo;
+is $ModifyMultiple::before, $pre+1, "before applies to first of multiple subs";
+$baz->bar;
+is $ModifyMultiple::before, $pre+2, "before applies to second of multiple subs";
+
 done_testing;