File Coverage

blib/lib/Web/Dispatch/Node.pm
Criterion Covered Total %
statement 16 16 100.0
branch 4 4 100.0
condition n/a
subroutine 5 5 100.0
pod 0 1 0.0
total 25 26 96.1


line stmt bran cond sub pod time code
1             package Web::Dispatch::Node;
2              
3 15     15   78 use Moo;
  15         28  
  15         96  
4              
5             with 'Web::Dispatch::ToApp';
6              
7             for (qw(match run)) {
8             has "_${_}" => (is => 'ro', required => 1, init_arg => $_);
9             }
10              
11             sub call {
12 180     180 0 269 my ($self, $env) = @_;
13 180 100       807 if (my ($env_delta, @match) = $self->_match->($env)) {
14 94         243 ($env_delta, $self->_curry(@match));
15             } else {
16             ()
17 86         468 }
18             }
19              
20             sub _curry {
21 94     94   152 my ($self, @args) = @_;
22 94         243 my $run = $self->_run;
23 94     94   284 my $code = sub { $run->(@args, $_[0]) };
  94         273  
24             # if the first argument is a hashref, localize %_ to it to permit
25             # use of $_{name} inside the dispatch sub
26             ref($args[0]) eq 'HASH'
27 94 100   7   485 ? do { my $v = $args[0]; sub { local *_ = $v; &$code } }
  7         11  
  7         42  
  7         18  
  7         15  
28             : $code
29             }
30              
31             1;