X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FScriptRole.pm;h=9e67685ac35f22ac0c15870f3175e4d4beaab924;hb=19529022add09ffd8cec4011d679f5ea007abf5f;hp=ca7055d93e46159af24ac26375e2a1c09dca96f4;hpb=d3082facb5273f9970121638c0385ecfc0f7b090;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/ScriptRole.pm b/lib/Catalyst/ScriptRole.pm index ca7055d..9e67685 100644 --- a/lib/Catalyst/ScriptRole.pm +++ b/lib/Catalyst/ScriptRole.pm @@ -2,11 +2,15 @@ package Catalyst::ScriptRole; use Moose::Role; use MooseX::Types::Moose qw/Str Bool/; use Pod::Usage; +use MooseX::Getopt; use namespace::autoclean; -requires 'run'; - -with 'MooseX::Getopt'; +with 'MooseX::Getopt' => { + excludes => [qw/ + _getopt_spec_warnings + _getopt_spec_exception + /], +}; has application_name => ( traits => ['NoGetopt'], @@ -17,13 +21,19 @@ has application_name => ( has help => ( traits => ['Getopt'], - cmd_aliases => 'h', isa => Bool, is => 'ro', documentation => q{Display this help and exit}, ); -sub _display_help { +sub _getopt_spec_exception {} + +sub _getopt_spec_warnings { + shift; + warn @_; +} + +sub _exit_with_usage { my $self = shift; pod2usage(); exit 0; @@ -31,7 +41,7 @@ sub _display_help { before run => sub { my $self = shift; - $self->_display_help if $self->help; + $self->_exit_with_usage if $self->help; }; sub run { @@ -50,4 +60,71 @@ sub _run_application { $app->run($self->_application_args); } +# GROSS HACK, temporary until MX::Getopt gets some proper refactoring and unfucking.. +around '_parse_argv' => sub { + my ($orig, $self, @args) = @_; + my %data = eval { $self->$orig(@args) }; + $self->_exit_with_usage($@) if $@; + $data{usage} = Catalyst::ScriptRole::Useage->new(code => sub { shift; $self->_exit_with_usage(@_) }); + return %data; +}; + +# This package is going away. +package # Hide from PAUSE + Catalyst::ScriptRole::Useage; +use Moose; +use namespace::autoclean; + +has code => ( is => 'ro', required => 1 ); + +sub die { shift->code->(@_) } + 1; + +=head1 NAME + +Catalyst::ScriptRole - Common functionality for Catalyst scripts. + +=head1 SYNOPSIS + + package MyApp::Script::Foo; + use Moose; + use namespace::autoclean; + + with 'Catalyst::Script::Role'; + + 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 + +L + +=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 +