File Coverage

blib/lib/MojoX/Linda.pm
Criterion Covered Total %
statement 50 57 87.7
branch 9 20 45.0
condition 3 17 17.6
subroutine 9 10 90.0
pod 0 2 0.0
total 71 106 66.9


line stmt bran cond sub pod time code
1             package MojoX::Linda;
2             # ABSTRACT: Plausibly helpful (and probably drunk) wrapper around morbo
3              
4 2     2   263871 use 5.022;
  2         6  
5 2     2   902 use exact;
  2         76163  
  2         8  
6              
7 2     2   6125 use Class::Method::Modifiers 'install_modifier';
  2         3631  
  2         150  
8 2     2   1078 use Config::App ();
  2         158076  
  2         173  
9 2     2   15 use File::Find 'find';
  2         5  
  2         122  
10 2     2   1023 use Mojo::Server::Morbo;
  2         916886  
  2         12  
11 2     2   106 use Mojo::File 'path';
  2         4  
  2         2463  
12              
13             our $VERSION = '1.05'; # VERSION
14              
15 1     1 0 206202 sub conf ($conf) {
  1         2  
  1         20  
16 1         11 my $conf_app = Config::App->find;
17 1 50       8248 my $mojo_linda = ($conf_app) ? $conf_app->get( qw( mojolicious linda ) ) : {};
18              
19 1   33     15 $conf->{$_} //= $mojo_linda->{$_} for ( qw( silent app production backend ) );
20 1   33     8 $conf->{app} //= $ARGV[0] || do {
      33        
21             my $match;
22             for my $file ( path('.')->list_tree->to_array->@* ) {
23             next unless -x $file;
24             if ( $file->slurp =~ /\b(
25             Mojolicious::Commands\s*\-\s*>\s*start_app|
26             MojoX::ConfigAppStart\s*\-\s*>\s*start
27             )\b/x ) {
28             $match = $file->to_string;
29             last;
30             }
31             }
32             $match;
33             };
34              
35 1         2 for my $name ( qw( listen watch ) ) {
36 2         12 my %hash = map { $_ => 1 } $conf->{$name}->@*, $mojo_linda->{$name}->@*;
  0         0  
37 2         8 $conf->{$name} = [ keys %hash ];
38             }
39              
40 1 50       4 unless ( $conf->{listen}->@* ) {
41 1         22 for ( 3000 .. 3999 ) {
42 1 50       14 unless (
43             IO::Socket::INET->new(
44             PeerAddr => 'localhost',
45             Proto => 'tcp',
46             PeerPort => $_,
47             )
48             ) {
49 1         1235 $conf->{listen} = [ 'http://*:' . $_ ];
50 1         10 last;
51             }
52             }
53             }
54              
55 1 50       4 $conf_app->deimport if $conf_app;
56              
57 1         8 return $conf;
58             }
59              
60 1     1 0 1 sub run ($conf) {
  1         3  
  1         1  
61 1 50       5 $ENV{MOJO_MODE} = 'production' if $conf->{production};
62 1 50       3 $ENV{MOJO_MORBO_BACKEND} = $conf->{backend} if $conf->{backend};
63              
64             install_modifier( 'Mojo::Server::Morbo', 'after', '_spawn', sub {
65 0 0   0   0 say ' Silent : ', ( ( $conf->{silent} ) ? 'Yes' : 'No' );
66 0         0 say ' App : ', $conf->{app};
67 0   0     0 say ' Mode : ', $ENV{MOJO_MODE} // '>Undefined<';
68 0   0     0 say ' Backend : ', $ENV{MOJO_MORBO_BACKEND} // '>Undefined<';
69 0   0     0 say ' Listen : ', join( ', ', $conf->{listen}->@* ) || '>Unspecified<';
70 0   0     0 say ' Watch : ', join( ', ', $conf->{watch}->@* ) || '>Unspecified<';
71 1 50       17 } ) if ( not $conf->{silent} );
72              
73 1         443 my $morbo = Mojo::Server::Morbo->new( silent => $conf->{silent} );
74              
75 1 50       11 $morbo->daemon->listen( $conf->{listen} ) if @{ $conf->{listen} };
  1         9  
76 1 50       68 $morbo->backend->watch( $conf->{watch} ) if @{ $conf->{watch} };
  1         4  
77              
78 1         6 $morbo->run( $conf->{app} );
79              
80 1         10 return 0;
81             }
82              
83             1;
84              
85             __END__