App-Oozie

 view release on metacpan or  search on metacpan

lib/App/Oozie.pm  view on Meta::CPAN

package App::Oozie;

use 5.014;
use strict;
use warnings;

our $VERSION = '0.020'; # VERSION

use namespace::autoclean -except => [qw/_options_data _options_config/];

use Moo;
use MooX::Options prefer_commandline => 0,
                  protect_argv       => 0,
                  usage_string       => <<'USAGE',
Usage: %c %o action
USAGE
;

use App::Oozie::Util::Plugin qw( find_plugins );

with qw(
    App::Oozie::Role::Log
);

option debug => (
    is  => 'rw',
    doc => 'Enable debug messages',
);

sub run {
    my $self   = shift;
    my $debug  = $self->debug;
    my $logger = $self->logger;

    my $action_to_class = find_plugins('App::Oozie::Action');

    if ( $debug ) {
        $logger->debug( sprintf 'Found: %s', $_ )
            for sort keys %{ $action_to_class };
    }

    my @valid = sort keys %{ $action_to_class };

    my $action = shift( @ARGV ) || do {
        my $msg = sprintf "Please specify an action. Possible actions are any one of:\n\n%s\n",
                    join q{}, map { "\t$_\n" } @valid
        ;
        $self->options_usage(1, $msg);
    };

    $action =~ s{[_]}{-}xmsg;

    my $class = $action_to_class->{ $action } || do {
        my $msg = sprintf "The specified action `%s` is invalid. Possible actions are any one of:\n\n%s\n",
                    $action,
                    join q{}, map { "\t$_\n" } @valid
        ;
        $self->options_usage(1, $msg);
    };

    my @cmd = (
        $^X,
        ( map { '-I' . $_ } @INC ),
        '-M' . $class,
        '-E', "$class->new_with_options->run",
        q{--},
        @ARGV,
    );



( run in 0.559 second using v1.01-cache-2.11-cpan-63c85eba8c4 )