Good news, everyone! After 20 years of living in the pre-Perl 5.10 cold of the CGI.pm universe, I've spent only a few months basking in the glory of modern perl and Mojolicious. Meaning the code that follows may be terrible, so please be nice. :)
I initial wrote this to make it easier to switch between development projects without having to clutter up my projects with launcher scripts or juggle environment settings and command line switches. Now I think it would be fun to submit it to CPAN for CPAN Day as my first module, and would like any feedback on making it better, and if the name is too official or would pollute the namespace (I'd happily rename it). package Mojolicious::Command::morbo; use Mojo::Base 'Mojolicious::Command'; # Kittens give Morbo gas. use Mojo::Server::Morbo; has description => 'Start Morbo via application configuration'; has usage => sub { shift->extract_usage }; sub run { my ($self, @args) = @_; my $morbo = Mojo::Server::Morbo->new; my $config = $self->app->config->{morbo}; if (_is_defined_arrayref($config->{listen})) { $ENV{MOJO_LISTEN} = join ',', @{$config->{listen}}; } if (defined $config->{mode}) { $ENV{MOJO_MODE} = $config->{mode}; } if (defined $config->{proxy}) { $ENV{MOJO_REVERSE_PROXY} = $config->{proxy} ? 1 : 0; } if (defined $config->{verbose}) { $ENV{MORBO_VERBOSE} = $config->{verbose} ? 1 : 0; } if (_is_defined_arrayref($config->{watch})) { my $watch = $config->{watch}; if ($$watch[0] eq '+') { shift @$watch; push @$watch, @{$morbo->watch}; } $morbo->watch($watch); } $morbo->run($ENV{MOJO_EXE}); } sub _is_defined_arrayref { return (defined $_[0] && ref $_[0] eq 'ARRAY' && scalar(@{$_[0]}) > 0); } 1; =encoding utf8 =head1 NAME Mojolicious::Command::morbo - Morbo command =head1 SYNOPSIS Usage: APPLICATION morbo # myapp.conf morbo => { listen => ['https://*:443','http://[::]:3000'], mode => 'production', proxy => 1, verbose => 1, watch => ['just','these','dirs'] } # Mojolicious::Lite plugin Config => { default => { morbo => { listen => ['https://*:443','http://[::]:3000'], ... watch => ['+','more','dirs'] } } } # Replace default watched directories watch => ['just','these','dirs'] # Append to default watched directories watch => ['+','more','dirs'] =head1 DESCRIPTION L<Mojolicious::Command::morbo> starts applications with L<Mojo::Server::Morbo> using the application's configuration. All settings are optional. Boolean settings that effect evironment variables will clobber existing values even when set to false. =head1 ATTRIBUTES L<Mojolicious::Command::morbo> inherits all attributes from L<Mojolicious::Command> and implements the following new ones. =head2 description my $description = $morbo->description; $morbo = $morbo->description('Foo!'); Short description of this command, used for the command list. =head2 usage my $usage = $morbo->usage; $morbo = $morbo->usage('Foo!'); Usage information for this command, used for the help screen. =head1 METHODS L<Mojolicious::Command::morbo> inherits all methods from L<Mojolicious::Command> and implements the following new ones. =head2 run $morbo->run(@ARGV); Run this command. =head1 SEE ALSO L<Mojolicious>, L<Mojolicious::Guides>, L<http://mojolicio.us>. =cut Thank you! V -- You received this message because you are subscribed to the Google Groups "Mojolicious" group. To unsubscribe from this group and stop receiving emails from it, send an email to mojolicious+unsubscr...@googlegroups.com. To post to this group, send email to mojolicious@googlegroups.com. Visit this group at http://groups.google.com/group/mojolicious. For more options, visit https://groups.google.com/d/optout.