File Coverage

blib/lib/Plack/Middleware/DefaultDocument.pm
Criterion Covered Total %
statement 32 32 100.0
branch 6 8 75.0
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 46 48 95.8


line stmt bran cond sub pod time code
1             package Plack::Middleware::DefaultDocument;
2              
3 2     2   31541 use strict;
  2         3  
  2         71  
4 2     2   10 use warnings;
  2         4  
  2         83  
5              
6             our $VERSION = '0.02';
7              
8 2     2   850 use parent 'Plack::Middleware';
  2         299  
  2         14  
9 2     2   17784 use Plack::Util;
  2         4  
  2         39  
10 2     2   1438 use Plack::MIME;
  2         1385  
  2         510  
11              
12             sub call {
13 4     4 1 28338 my $self = shift;
14 4         7 my $env = shift;
15              
16 4         29 my $r = $self->app->($env);
17              
18             $self->response_cb($r, sub {
19 4     4   56 my $r = shift;
20 4 50       13 return if $r->[0] != 404;
21              
22 4         12 for my $uri (grep { $_ ne 'app' } keys %$self) {
  16         23  
23 9 100       102 if ($env->{PATH_INFO} =~ m{$uri}) {
24             ## return 404 if the specified file doesn't exist
25 3 100       92 return unless -f $self->{$uri};
26              
27 2         9 my $h = Plack::Util::headers($r->[1]);
28 2         73 $h->remove('Content-Length');
29 2         85 $h->set('Content-Type', Plack::MIME->mime_type($env->{PATH_INFO}));
30              
31 2 50       220 open my $fh, '<', $self->{$uri}
32             or die "Can't open file $self->{$uri}: $!";
33 2         4 $r->[0] = 200;
34 2         3 $r->[2] = $fh;
35              
36 2         22 return;
37             }
38             }
39 4         143 });
40             }
41              
42             1;
43              
44             __END__