X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FScriptRole.pm;h=ac79b433c5e88e526b6145ff7402a935e99959f2;hb=44d28c7d3def77dbf71d53b97362247a7329a513;hp=dd0a7d5653975067c5aa493c0c6b33a2341aa405;hpb=4f0612fdbc3922b6b32f9f30269849a51995b4f3;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/ScriptRole.pm b/lib/Catalyst/ScriptRole.pm index dd0a7d5..ac79b43 100644 --- a/lib/Catalyst/ScriptRole.pm +++ b/lib/Catalyst/ScriptRole.pm @@ -1,27 +1,42 @@ package Catalyst::ScriptRole; use Moose::Role; +use Plack::Runner; use MooseX::Types::Moose qw/Str Bool/; use Pod::Usage; +use MooseX::Getopt; use namespace::autoclean; -with 'MooseX::Getopt'; +with 'MooseX::Getopt' => { + excludes => [qw/ + _getopt_spec_warnings + _getopt_spec_exception + _getopt_full_usage + /], +}; has application_name => ( - traits => ['NoGetopt'], - isa => Str, - is => 'ro', + traits => ['NoGetopt'], + isa => Str, + is => 'ro', required => 1, ); has help => ( - traits => ['Getopt'], - cmd_aliases => 'h', - isa => Bool, - is => 'ro', - documentation => q{Display this help and exit}, + traits => ['Getopt'], + isa => Bool, + is => 'ro', + documentation => 'Display this help and exit', + cmd_aliases => ['?', 'h'], ); -sub _exit_with_usage { +sub _getopt_spec_exception {} + +sub _getopt_spec_warnings { + shift; + warn @_; +} + +sub _getopt_full_usage { my $self = shift; pod2usage(); exit 0; @@ -29,7 +44,7 @@ sub _exit_with_usage { before run => sub { my $self = shift; - $self->_exit_with_usage if $self->help; + $self->_getopt_full_usage if $self->help; }; sub run { @@ -45,28 +60,10 @@ sub _run_application { my $self = shift; my $app = $self->application_name; Class::MOP::load_class($app); - $app->run($self->_application_args); + my $psgi_app = $app->run($self->_application_args); + Plack::Runner->run('--app' => $psgi_app); } -# 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 @@ -75,11 +72,35 @@ Catalyst::ScriptRole - Common functionality for Catalyst scripts. =head1 SYNOPSIS - FIXME - + package MyApp::Script::Foo; + use Moose; + use namespace::autoclean; + + with 'Catalyst::ScriptRole'; + + sub _application_args { ... } + =head1 DESCRIPTION - FIXME +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 @@ -91,4 +112,3 @@ This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself. =cut -