Qgoda

 view release on metacpan or  search on metacpan

lib/Qgoda/Command.pm  view on Meta::CPAN


    $args ||= [];
    my %options = $self->parseOptions($args);

    return $self->_run($args, $global_options, %options);
}

sub parseOptions {
    my ($self, $args) = @_;

    my %options = $self->_getDefaults;
    my %specs = $self->_getOptionSpecs;
    $specs{help} = 'h|help';

    my %optspec;
    foreach my $key (keys %specs) {
        $optspec{$specs{$key}} = 
                ref $options{$key} ? $options{$key} : \$options{$key};
    }

    Getopt::Long::Configure('bundling');
    {
        local $SIG{__WARN__} = sub {
            $SIG{__WARN__} = 'DEFAULT';
            $self->__usageError(shift);
        };

        GetOptionsFromArray($args, %optspec);
    }

    # Exits.
    $self->_displayHelp if $options{help};

    return %options;
}

sub _getDefaults {}
sub _getOptionSpecs {};

sub __usageError {
    my ($self, @msg) = @_;

    my $class = ref $self;
    $class =~ s/^Qgoda::Command:://;
    my $cmd = join '-', map { lcfirst $_ } split /::/, $class;

    return Qgoda::CLI->commandUsageError($cmd, @msg);
}

sub _displayHelp {
    my ($self) = @_;

    my $module = class2module ref $self;

    my $path = $INC{$module};
    $path = './' . $path if !File::Spec->file_name_is_absolute($path);

    $^W = 1 if $ENV{'PERLDOCDEBUG'};
    pop @INC if $INC[-1] eq '.';
    require Pod::Perldoc;
    local @ARGV = ($path);
    exit(Pod::Perldoc->run());
}

1;



( run in 1.733 second using v1.01-cache-2.11-cpan-d80b1682f3f )