App-Spec
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/App/Spec/Run.pm view on Meta::CPAN
# ABSTRACT: App::Spec framework to run your app
use strict;
use warnings;
package App::Spec::Run;
use 5.010;
our $VERSION = '0.013'; # VERSION
use App::Spec::Run::Validator;
use App::Spec::Run::Response;
use Getopt::Long qw/ :config pass_through bundling /;
use Ref::Util qw/ is_arrayref /;
use Moo;
has spec => ( is => 'ro' );
has options => ( is => 'rw' );
has parameters => ( is => 'rw', default => sub { +{} } );
has commands => ( is => 'rw' );
has argv => ( is => 'rw' );
has argv_orig => ( is => 'rw' );
#has runmode => ( is => 'rw', default => 'normal' );
has validation_errors => ( is => 'rw' );
has op => ( is => 'rw' );
has cmd => ( is => 'rw' );
has response => ( is => 'rw', default => sub { App::Spec::Run::Response->new } );
has subscribers => ( is => 'rw', default => sub { +{} } );
my %EVENTS = (
print_output => 1,
global_options => 1,
);
sub process {
my ($self) = @_;
my $plugins = $self->spec->plugins || [];
for my $plugin (@$plugins) {
$plugin->init_run($self);
}
my @callbacks;
my $subscriber_events = $self->subscribers;
for my $key (qw/ global_options print_output /) {
my $subscribers = $subscriber_events->{ $key };
for my $sub (@$subscribers) {
my $plugin = $sub->{plugin};
my $method = $sub->{method};
my $callback = sub {
$plugin->$method( run => $self, @_);
};
push @callbacks, $callback;
}
$self->response->add_callbacks($key => \@callbacks);
}
my $argv = $self->argv;
unless ($argv) {
$argv = \@ARGV;
$self->argv($argv);
$self->argv_orig([ @$argv ]);
}
my $completion_parameter = $ENV{PERL5_APPSPECRUN_COMPLETION_PARAMETER};
my %option_specs;
my %param_specs;
unless ($self->op) {
$self->process_input(
option_specs => \%option_specs,
param_specs => \%param_specs,
);
}
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.273 second using v1.00-cache-2.02-grep-82fe00e-cpan-f5108d614456 )