conversion to Path::Tiny
[gitmo/MooseX-Runnable.git] / lib / MooseX / Runnable / Util / ArgParser.pm
index 1835103..9263fa2 100644 (file)
@@ -1,9 +1,12 @@
 package MooseX::Runnable::Util::ArgParser;
 use Moose;
 use MooseX::Types::Moose qw(HashRef ArrayRef Str Bool);
-use MooseX::Types::Path::Class qw(Dir);
+use MooseX::Types::Path::Tiny qw(Path);
+use Path::Tiny; # exports path()
 use List::MoreUtils qw(first_index);
 
+use FindBin;
+
 use namespace::autoclean -also => ['_look_for_dash_something', '_delete_first'];
 
 has 'argv' => (
@@ -28,7 +31,7 @@ has 'modules' => (
 
 has 'include_paths' => (
     is         => 'ro',
-    isa        => ArrayRef[Dir],
+    isa        => ArrayRef[Path],
     lazy_build => 1,
     auto_deref => 1,
 );
@@ -117,7 +120,7 @@ sub _build_modules {
 sub _build_include_paths {
     my $self = shift;
     my @args = $self->argv;
-    return [ map { Path::Class::dir($_) } _look_for_dash_something 'I', @args ];
+    return [ map { path($_) } _look_for_dash_something 'I', @args ];
 }
 
 sub _build_is_help {
@@ -220,6 +223,39 @@ sub _build_app_args {
     return [@args];
 }
 
+# XXX: bad
+sub guess_cmdline {
+    my ($self, %opts) = @_;
+
+    confess 'Parser is help' if $self->is_help;
+
+    my @perl_flags = @{$opts{perl_flags} || []};
+    my @without_plugins = @{$opts{without_plugins} || []};
+
+    # invoke mx-run
+    my @cmdline = (
+        $^X,
+        (map { "-I$_" } @INC),
+        @perl_flags,
+        $FindBin::Bin.'/'.$FindBin::Script,
+    );
+    push @cmdline, map { "-I$_" } $self->include_paths;
+    push @cmdline, map { "-M$_" } $self->modules;
+
+  p:
+    for my $plugin (keys %{$self->plugins}){
+        for my $without (@without_plugins) {
+            next p if $without eq $plugin;
+        }
+        push @cmdline, "+$plugin", @{$self->plugins->{$plugin} || []};
+    }
+    push @cmdline, '--';
+    push @cmdline, $self->class_name;
+    push @cmdline, $self->app_args;
+
+    return @cmdline;
+}
+
 1;
 
 __END__