File Coverage

blib/lib/Puncheur/Runner.pm
Criterion Covered Total %
statement 30 36 83.3
branch 6 8 75.0
condition 1 2 50.0
subroutine 5 6 83.3
pod 0 2 0.0
total 42 54 77.7


line stmt bran cond sub pod time code
1             package Puncheur::Runner;
2 1     1   16754 use strict;
  1         3  
  1         45  
3 1     1   4 use warnings;
  1         2  
  1         25  
4              
5 1     1   496 use Plack::Runner;
  1         13656  
  1         26  
6 1     1   6 use Plack::Util;
  1         2  
  1         223  
7              
8             sub new {
9 4     4 0 6702 my ($class, $app, $plackup_options) = @_;
10 4   50     12 $plackup_options ||= {};
11 4         16 $app = Plack::Util::load_class($app);
12 4         529 my ($options, $argv);
13 4 100       39 if ($app->can('parse_options')) {
14 2         8 ($options, $argv) = $app->parse_options(@ARGV);
15             }
16 4 100       24 $argv = [@ARGV] unless $argv;
17              
18 4         6 my @default;
19 4         17 while (my ($key, $value) = each %$plackup_options) {
20 8         28 push @default, "--$key=$value";
21             }
22 4         22 my $runner = Plack::Runner->new;
23 4         49 $runner->parse_options(@default, @$argv);
24              
25 4 100       15445 if (!$app->can('parse_options')) {
26 2         4 my %options = @{ $runner->{options} };
  2         9  
27 2         9 delete $options{$_} for qw/listen socket/;
28 2         4 $options = \%options;
29             }
30              
31             bless {
32 4         30 app => $app,
33             runner => $runner,
34             app_options => $options,
35             }, $class;
36             }
37              
38             sub run {
39 0     0 0   my $self = shift;
40 0 0         my %opts = @_ == 1 ? %{$_[0]} : @_;
  0            
41              
42 0           my $app_options = $self->{app_options};
43 0           my $psgi = $self->{app}->new(%$app_options, %opts)->to_psgi;
44 0           $self->{runner}->run($psgi);
45             }
46              
47             1;