File Coverage

blib/lib/Plack/Middleware/Debug/Dancer/TemplateTimer.pm
Criterion Covered Total %
statement 18 43 41.8
branch 0 4 0.0
condition n/a
subroutine 6 11 54.5
pod 2 2 100.0
total 26 60 43.3


line stmt bran cond sub pod time code
1             package Plack::Middleware::Debug::Dancer::TemplateTimer;
2              
3             =head1 NAME
4              
5             Plack::Middleware::Debug::Dancer::TemplateTimer - Template and layout rendering timer for Dancer
6              
7             =head1 VERSION
8              
9             0.001
10              
11             =cut
12              
13             our $VERSION = '0.001';
14              
15 1     1   12952 use strict;
  1         1  
  1         24  
16 1     1   3 use warnings;
  1         2  
  1         22  
17 1     1   401 use parent qw(Plack::Middleware::Debug::Base);
  1         223  
  1         4  
18 1     1   22251 use Class::Method::Modifiers qw/install_modifier/;
  1         1094  
  1         52  
19 1     1   496 use Time::HiRes qw/gettimeofday tv_interval/;
  1         951  
  1         3  
20              
21 1     1   725 use Dancer;
  1         152855  
  1         5  
22              
23             my $env_key = 'debug.dancer.templatetimer';
24              
25             sub prepare_app {
26              
27             install_modifier 'Dancer::Template::Abstract', 'around', 'layout', sub {
28 0     0     my $orig = shift;
29 0           my $start = [gettimeofday];
30 0           my $ret = $orig->(@_);
31 0           my $end = [gettimeofday];
32             Dancer::SharedData->request->env->{$env_key}->{layout} +=
33 0           tv_interval( $start, $end );
34 0           return $ret;
35 0     0 1   };
36              
37             install_modifier 'Dancer::Template::Abstract', 'around', 'render', sub {
38 0     0     my $orig = shift;
39 0           my $start = [gettimeofday];
40 0           my $ret = $orig->(@_);
41 0           my $end = [gettimeofday];
42             Dancer::SharedData->request->env->{$env_key}->{template} +=
43 0           tv_interval( $start, $end );
44 0           return $ret;
45 0           };
46             }
47              
48             my $list_template_dumped = __PACKAGE__->build_template(<<'EOTMPL');
49            
50            
51            
52             Key
53             Value
54            
55            
56            
57             % my $i;
58             % foreach my $key (qw| template layout total |) {
59             % next unless defined $_[0]->{vars}->{$key};
60            
61             <%= $key %>
62             <%= $_[0]->{vars}->{$key} %>
63            
64             % }
65            
66            
67             EOTMPL
68              
69             sub run {
70 0     0 1   my ( $self, $env, $panel ) = @_;
71            
72             return sub {
73 0     0     my $res = shift;
74 0           $panel->title('Dancer::TemplateTimer');
75 0 0         my %vars = %{ $env->{$env_key} || {} };
  0            
76 0           foreach my $key ( keys %vars ) {
77 0           $vars{total} += $vars{$key};
78             }
79 0 0         if ( $vars{total} ) {
80 0           $panel->nav_subtitle($vars{total});
81             }
82             $panel->content(
83 0           $self->render( $list_template_dumped, { vars => \%vars } ) );
84 0           };
85             }
86              
87             1;
88              
89             __END__