X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FScriptRole.pm;h=845e891117b838a1af34404c564a460841bafdc8;hp=6bea8c1a0d35c2058a674a8d7bcfe5f2a8de5489;hb=3ac082e46385d8f5a94838e8790538dc1f694565;hpb=532f0516947cf047368e91150ca2ab1cfd4c1e64 diff --git a/lib/Catalyst/ScriptRole.pm b/lib/Catalyst/ScriptRole.pm index 6bea8c1..845e891 100644 --- a/lib/Catalyst/ScriptRole.pm +++ b/lib/Catalyst/ScriptRole.pm @@ -1,47 +1,47 @@ package Catalyst::ScriptRole; use Moose::Role; -use MooseX::Types::Moose qw/Str Bool/; use Pod::Usage; use MooseX::Getopt; -use Catalyst::Engine::Loader; -use MooseX::Types::LoadableClass qw/LoadableClass/; +use Catalyst::EngineLoader; +use Moose::Util::TypeConstraints; +use Catalyst::Utils; use namespace::autoclean; +subtype 'Catalyst::ScriptRole::LoadableClass', + as 'ClassName'; +coerce 'Catalyst::ScriptRole::LoadableClass', + from 'Str', + via { Catalyst::Utils::ensure_class_loaded($_); $_ }; + with 'MooseX::Getopt' => { - excludes => [qw/ + -version => 0.48, + -excludes => [qw/ _getopt_spec_warnings _getopt_spec_exception - _getopt_full_usage + print_usage_text /], }; has application_name => ( traits => ['NoGetopt'], - isa => Str, + isa => 'Str', is => 'ro', required => 1, ); -has help => ( - traits => ['Getopt'], - isa => Bool, - is => 'ro', - documentation => 'Display this help and exit', - cmd_aliases => ['?', 'h'], -); - has loader_class => ( - isa => LoadableClass, + isa => 'Catalyst::ScriptRole::LoadableClass', is => 'ro', coerce => 1, - default => 'Catalyst::Engine::Loader', + default => 'Catalyst::EngineLoader', documentation => 'The class to use to detect and load the PSGI engine', ); has _loader => ( isa => 'Plack::Loader', default => sub { - shift->loader_class->new + my $self = shift; + $self->loader_class->new(application_name => $self->application_name); }, handles => { load_engine => 'load', @@ -57,38 +57,40 @@ sub _getopt_spec_warnings { warn @_; } -sub _getopt_full_usage { +sub print_usage_text { 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 { - () + my $self = shift; + return { + argv => $self->ARGV, + extra_argv => $self->extra_argv, + } } sub _plack_loader_args { - my @app_args = shift->_application_args; + my $self = shift; + my @app_args = $self->_application_args; return (port => $app_args[0]); } +sub _plack_engine_name {} + sub _run_application { my $self = shift; my $app = $self->application_name; - Class::MOP::load_class($app); + Catalyst::Utils::ensure_class_loaded($app); my $server; - if (my $e = $self->can('_plack_engine_name') ) { - $server = $self->load_engine($self->$e, $self->_plack_loader_args); + if (my $e = $self->_plack_engine_name ) { + $server = $self->load_engine($e, $self->_plack_loader_args); } else { $server = $self->autoload_engine($self->_plack_loader_args); @@ -122,6 +124,10 @@ Role with the common functionality of Catalyst scripts. The method invoked to run the application. +=head2 print_usage_text + +Prints out the usage text for the script you tried to invoke. + =head1 ATTRIBUTES =head2 application_name