package MooseX::Runnable::Util::ArgParser;
+# ABSTRACT: parse @ARGV for mx-run
+
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' => (
has 'include_paths' => (
is => 'ro',
- isa => ArrayRef[Dir],
+ isa => ArrayRef[Path],
lazy_build => 1,
auto_deref => 1,
);
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 {
my %plugins = %{ $self->plugins };
+ PLUGIN:
for my $p (keys %plugins){
my $vl = scalar @{ $plugins{$p} };
- splice @args, (first_index { $_ eq "+$p" } @args), $vl + 1;
+ my $idx = first_index { $_ eq "+$p" } @args;
+ next PLUGIN if $idx == -1; # HORRIBLE API!
+
+ splice @args, $idx, $vl + 1;
}
if($args[0] eq '--'){
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__
-=head1 NAME
+=pod
-MooseX::Runnable::Util::ArgParser - parse @ARGV for mx-run
+=for stopwords mx
=head1 SYNOPSIS