handles => "RoleName" should try to load the module
Christian Walde [Mon, 11 Feb 2013 12:23:54 +0000 (13:23 +0100)]
Changes
lib/Method/Generate/Accessor.pm
t/accessor-handles.t
t/lib/ExtRobot.pm [new file with mode: 0644]

diff --git a/Changes b/Changes
index c6f9fff..f0b6215 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,5 @@
+  - handles => "RoleName" tries to load the module
+
 1.000008 - 2013-02-06
   - Re-export on 'use Moo' after 'no Moo'
   - Export meta() into roles (but mark as non-method to avoid composing it)
index c1ce749..1a13a56 100644 (file)
@@ -7,6 +7,7 @@ use Sub::Quote;
 use B 'perlstring';
 use Scalar::Util 'blessed';
 use overload ();
+use Module::Runtime qw(use_module);
 BEGIN {
   our $CAN_HAZ_XS =
     !$ENV{MOO_XS_DISABLE}
@@ -145,7 +146,7 @@ sub generate_method {
         map [ $_ => ref($hspec->{$_}) ? @{$hspec->{$_}} : $hspec->{$_} ],
           keys %$hspec;
       } elsif (!ref($hspec)) {
-        map [ $_ => $_ ], Role::Tiny->methods_provided_by($hspec);
+        map [ $_ => $_ ], use_module('Role::Tiny')->methods_provided_by(use_module($hspec))
       } else {
         die "You gave me a handles of ${hspec} and I have no idea why";
       }
index aee5958..a0df36c 100644 (file)
@@ -1,12 +1,21 @@
 use strictures 1;
 use Test::More;
 
+use lib "t/lib";
+
+{
+  package Baz;
+  use Moo;
+  sub beep {'beep'}
+}
+
 {
   package Robot;
 
   use Moo::Role;
 
   requires 'smash';
+  $INC{"Robot.pm"} = 1;
 
 }
 
@@ -34,10 +43,12 @@ use Test::More;
   has foo4 => ( is => 'ro', handles => {
      eat_curry => [ yum => 'Curry!' ],
   });
+  has foo5 => ( is => 'ro', handles => 'ExtRobot' );
 }
 
 my $bar = Bar->new(
-  foo => Foo->new, foo2 => Foo->new, foo3 => Foo->new, foo4 => Foo->new
+  foo => Foo->new, foo2 => Foo->new, foo3 => Foo->new, foo4 => Foo->new,
+  foo5 => Baz->new
 );
 
 is $bar->one, 1, 'handles works';
@@ -47,6 +58,8 @@ is $bar->un, 1, 'handles works for aliasing a method';
 
 is $bar->smash, 'smash', 'handles works for a role';
 
+is $bar->beep, 'beep', 'handles loads roles';
+
 is $bar->eat_curry, 'Curry!', 'handles works for currying';
 
 done_testing;
diff --git a/t/lib/ExtRobot.pm b/t/lib/ExtRobot.pm
new file mode 100644 (file)
index 0000000..95d73a6
--- /dev/null
@@ -0,0 +1,7 @@
+package ExtRobot;
+
+use Moo::Role;
+
+requires 'beep';
+
+1;