X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FScriptRole.pm;h=f726626f5ef2e0b7004f9ef363406ec6bc3ddc11;hb=acbecf084395e9b46e607a3fe244faa3c1bd3abb;hp=e36ca2fdd39dcf07d99610a8702e12f7a3c7f6c3;hpb=4b0f97fc6eb94b7d347403cecbf9a71ec5322e37;p=catagits%2FCatalyst-Runtime.git diff --git a/lib/Catalyst/ScriptRole.pm b/lib/Catalyst/ScriptRole.pm index e36ca2f..f726626 100644 --- a/lib/Catalyst/ScriptRole.pm +++ b/lib/Catalyst/ScriptRole.pm @@ -1,13 +1,14 @@ package Catalyst::ScriptRole; use Moose::Role; -use Plack::Runner; use MooseX::Types::Moose qw/Str Bool/; use Pod::Usage; use MooseX::Getopt; +use Catalyst::Engine::Loader; +use MooseX::Types::LoadableClass qw/LoadableClass/; use namespace::autoclean; with 'MooseX::Getopt' => { - excludes => [qw/ + -excludes => [qw/ _getopt_spec_warnings _getopt_spec_exception _getopt_full_usage @@ -21,12 +22,25 @@ has application_name => ( required => 1, ); -has help => ( - traits => ['Getopt'], - isa => Bool, - is => 'ro', - documentation => 'Display this help and exit', - cmd_aliases => ['?', 'h'], +has loader_class => ( + isa => LoadableClass, + is => 'ro', + coerce => 1, + default => 'Catalyst::Engine::Loader', + documentation => 'The class to use to detect and load the PSGI engine', +); + +has _loader => ( + isa => 'Plack::Loader', + default => sub { + my $self = shift; + $self->loader_class->new(application_name => $self->application_name); + }, + handles => { + load_engine => 'load', + autoload_engine => 'auto', + }, + lazy => 1, ); sub _getopt_spec_exception {} @@ -42,11 +56,6 @@ sub _getopt_full_usage { exit 0; } -before run => sub { - my $self = shift; - $self->_getopt_full_usage if $self->help; -}; - sub run { my $self = shift; $self->_run_application; @@ -57,7 +66,8 @@ sub _application_args { } sub _plack_loader_args { - my @app_args = shift->_application_args; + my $self = shift; + my @app_args = $self->_application_args; return (port => $app_args[0]); } @@ -67,10 +77,10 @@ sub _run_application { Class::MOP::load_class($app); my $server; if (my $e = $self->can('_plack_engine_name') ) { - $server = Plack::Loader->load($self->$e, $self->_plack_loader_args); + $server = $self->load_engine($self->$e, $self->_plack_loader_args); } else { - $server = Plack::Loader->auto($self->_plack_loader_args); + $server = $self->autoload_engine($self->_plack_loader_args); } $app->run($self->_application_args, $server); }