CLI-Osprey
view release on metacpan or search on metacpan
lib/CLI/Osprey/Role.pm view on Meta::CPAN
);
has 'invoked_as' => (
is => 'ro',
);
sub new_with_options {
my ($class, %params) = @_;
my %config = $class->_osprey_config;
local @ARGV = @ARGV if $config{protect_argv};
if (!defined $params{invoked_as}) {
$params{invoked_as} = Getopt::Long::Descriptive::prog_name();
}
my ($parsed_params, $usage) = $class->parse_options(%params);
if ($parsed_params->{h}) {
return $class->osprey_usage(1, $usage);
} elsif ($parsed_params->{help}) {
lib/CLI/Osprey/Role.pm view on Meta::CPAN
}
sub osprey_usage {
my ($class, $code, @messages) = @_;
my $usage;
if (@messages && blessed($messages[0]) && $messages[0]->isa('CLI::Osprey::Descriptive::Usage')) {
$usage = shift @messages;
} else {
local @ARGV = ();
(undef, $usage) = $class->parse_options(help => 1);
}
my $message;
$message = join("\n", @messages, '') if @messages;
$message .= $usage . "\n";
if ($code) {
CORE::warn $message;
} else {
print $message;
}
exit $code if defined $code;
return;
}
sub osprey_help {
my ($class, $code, $usage) = @_;
unless (defined $usage && blessed($usage) && $usage->isa('CLI::Osprey::Descriptive::Usage')) {
local @ARGV = ();
(undef, $usage) = $class->parse_options(help => 1);
}
my $message = $usage->option_help . "\n";
if ($code) {
CORE::warn $message;
} else {
print $message;
}
exit $code if defined $code;
return;
}
sub osprey_man {
my ($class, $usage, $output) = @_;
unless (defined $usage && blessed($usage) && $usage->isa('CLI::Osprey::Descriptive::Usage')) {
local @ARGV = ();
(undef, $usage) = $class->parse_options(man => 1);
}
my $tmpdir = Path::Tiny->tempdir;
my $podfile = $tmpdir->child("help.pod");
$podfile->spew_utf8($usage->option_pod);
require Pod::Usage;
Pod::Usage::pod2usage(
-verbose => 2,
use Test::More;
use Capture::Tiny qw( capture );
use Test::Lib;
use MyTest::Class::Basic;
subtest 'command' => sub {
subtest "default options" => sub {
local @ARGV = ();
my ( $stdout, $stderr, @result ) =
capture { MyTest::Class::Basic->new_with_options->run };
is ( $stdout, "Hello world!\n", "message sent to stdout" );
is ( $stderr, '', "empty stderr" );
};
subtest "command line options" => sub {
local @ARGV = ( '--message', 'Hello Cleveland!' );
my ( $stdout, $stderr, @result ) =
capture { MyTest::Class::Basic->new_with_options->run };
is ( $stdout, "Hello Cleveland!\n", "message sent to stdout" );
is ( $stderr, '', "empty stderr" );
};
};
subtest 'subcommand' => sub {
subtest "default options" => sub {
local @ARGV = qw ( yell );
my ( $stdout, $stderr, @result ) =
capture { MyTest::Class::Basic->new_with_options->run };
is ( $stdout, "HELLO WORLD!\n", "message sent to stdout" );
is ( $stderr, '', "empty stderr" );
};
subtest "hyphenated options" => sub {
local @ARGV = qw ( yell --excitement-level 2 );
my ( $stdout, $stderr, @result ) =
capture { MyTest::Class::Basic->new_with_options->run };
is ( $stdout, "HELLO WORLD!!!\n", "message sent to stdout" );
is ( $stderr, '', "empty stderr" );
};
subtest "inline" => sub {
local @ARGV = qw ( whisper );
my ( $stdout, $stderr, @result ) =
capture { MyTest::Class::Basic->new_with_options->run };
is ( $stdout, "hello world!\n", "message sent to stdout" );
is ( $stderr, '', "empty stderr" );
};
};
done_testing;
( run in 0.511 second using v1.01-cache-2.11-cpan-49f99fa48dc )