1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
package Catalyst::ScriptRole;
use Moose::Role;
use MooseX::Types::Moose qw/Str Bool/;
use Pod::Usage;
use MooseX::Getopt;
use namespace::autoclean;
with 'MooseX::Getopt' => {
excludes => [qw/
_getopt_spec_warnings
_getopt_spec_exception
_getopt_full_usage
/],
};
has application_name => (
traits => ['NoGetopt'],
isa => Str,
is => 'ro',
required => 1,
);
has help => (
traits => ['Getopt'],
isa => Bool,
is => 'ro',
documentation => 'Display this help and exit',
cmd_aliases => ['?', 'h'],
);
sub _getopt_spec_exception {}
sub _getopt_spec_warnings {
shift;
warn @_;
}
sub _getopt_full_usage {
my $self = shift;
pod2usage();
exit 0;
}
before run => sub {
my $self = shift;
$self->_getopt_full_usage if $self->help;
};
sub run {
my $self = shift;
$self->_run_application;
}
sub _application_args {
()
}
sub _run_application {
my $self = shift;
my $app = $self->application_name;
Class::MOP::load_class($app);
$app->run($self->_application_args);
}
1;
=head1 NAME
Catalyst::ScriptRole - Common functionality for Catalyst scripts.
=head1 SYNOPSIS
package MyApp::Script::Foo;
use Moose;
use namespace::autoclean;
with 'Catalyst::ScriptRole';
sub _application_args { ... }
=head1 DESCRIPTION
Role with the common functionality of Catalyst scripts.
=head1 METHODS
=head2 run
The method invoked to run the application.
=head1 ATTRIBUTES
=head2 application_name
The name of the application class, e.g. MyApp
=head1 SEE ALSO
L<Catalyst>
L<MooseX::Getopt>
=head1 AUTHORS
Catalyst Contributors, see Catalyst.pm
=head1 COPYRIGHT
This library is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
|