Tag plugins that can take cmdline args with Role::CmdlineArgs; add test
[gitmo/MooseX-Runnable.git] / lib / MooseX / Runnable / Invocation.pm
index c3786c7..644d246 100644 (file)
@@ -26,7 +26,7 @@ has 'class' => (
 has 'plugins' => (
     is         => 'ro',
     isa        => HashRef[ArrayRef[Str]],
-    default    => sub { [] },
+    default    => sub { +{} },
     required   => 1,
     auto_deref => 1,
 );
@@ -45,13 +45,17 @@ sub BUILD {
 
         Class::MOP::load_class( $plugin );
 
-        my $args = eval {
-            $plugin->_build_initargs_from_cmdline(
-                @{$self->plugins->{$orig}},
-            );
-        };
-        if($@ && $plugin->can('_build_initargs_from_cmdline')){
-            confess "Error building initargs for $plugin: $@";
+        my $args;
+        if($plugin->meta->does_role('MooseX::Runnable::Invocation::Plugin::Role::CmdlineArgs')){
+            $args = eval {
+                $plugin->_build_initargs_from_cmdline(
+                    @{$self->plugins->{$orig}},
+                );
+            };
+
+            if($@) {
+                confess "Error building initargs for $plugin: $@";
+            }
         }
 
         $plugin->meta->apply(