File Coverage

blib/lib/Web/Dispatch/Wrapper.pm
Criterion Covered Total %
statement 20 27 74.0
branch 1 2 50.0
condition n/a
subroutine 8 11 72.7
pod 1 5 20.0
total 30 45 66.6


line stmt bran cond sub pod time code
1             package Web::Dispatch::Wrapper;
2              
3 15     15   77 use strictures 1;
  15         110  
  15         791  
4 15     15   2014 use Moo;
  15         2047  
  15         77  
5 15     15   27907 use Exporter 'import';
  15         29  
  15         5910  
6              
7             our @EXPORT = qw(dispatch_wrapper redispatch_to response_filter);
8              
9             extends 'Plack::Middleware';
10              
11             has 'wrapper' => (is => 'ro', required => 1);
12              
13             sub dispatch_wrapper (&) {
14 0     0 0 0 my ($code) = @_;
15 0         0 __PACKAGE__->from_code($code);
16             }
17              
18             sub from_code {
19 1     1 0 2 my ($class, $code) = @_;
20 1         5 $class->new(wrapper => $code);
21             }
22              
23             sub redispatch_to {
24 0     0 0 0 my ($new_path) = @_;
25             __PACKAGE__->from_code(sub {
26 0     0   0 $_[1]->({ %{$_[0]}, PATH_INFO => $new_path });
  0         0  
27 0         0 });
28             }
29              
30             sub response_filter (&) {
31 1     1 0 9 my ($code) = @_;
32             __PACKAGE__->from_code(sub {
33 1     1   3 my @result = $_[1]->($_[0]);
34 1 50       8 if (@result) {
35 1         3 $code->(@result);
36             } else {
37             ()
38 0         0 }
39 1         10 });
40             }
41              
42             sub to_app {
43 1     1 1 4 my $code = $_[0]->wrapper;
44 1         4 my $app = $_[0]->app;
45 1     1   4 sub { $code->($_[0], $app) }
46 1         7 }
47              
48             1;