handles => "RoleName" should try to load the module
[gitmo/Moo.git] / lib / Method / Generate / Accessor.pm
index 7a7bc26..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}
@@ -24,7 +25,8 @@ sub generate_method {
   if ($is eq 'ro') {
     $spec->{reader} = $name unless exists $spec->{reader};
   } elsif ($is eq 'rw') {
-    $spec->{accessor} = $name unless exists $spec->{accessor};
+    $spec->{accessor} = $name unless exists $spec->{accessor}
+      or ( $spec->{reader} and $spec->{writer} );
   } elsif ($is eq 'lazy') {
     $spec->{reader} = $name unless exists $spec->{reader};
     $spec->{lazy} = 1;
@@ -144,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";
       }