File Coverage

blib/lib/Dancer2/Plugin/Growler.pm
Criterion Covered Total %
statement 31 31 100.0
branch 8 8 100.0
condition 2 3 66.6
subroutine 9 9 100.0
pod n/a
total 50 51 98.0


line stmt bran cond sub pod time code
1             package Dancer2::Plugin::Growler;
2              
3 1     1   336642 use strict;
  1         2  
  1         25  
4 1     1   4 use warnings;
  1         1  
  1         17  
5              
6 1     1   361 use Dancer2::Plugin;
  1         1757  
  1         6  
7              
8             $Dancer2::Plugin::Growler::VERSION = '0.01';
9              
10             sub _growl {
11 9     9   8211 my ( $dsl, $msg, $args ) = @_;
12 9 100       123 $dsl->app->session->write( 'growls', [] ) if !$dsl->app->session->read('growls');
13 9 100       640 if ( exists $args->{delay} ) {
14 2 100 66     11 if ( !defined $args->{delay} || $args->{delay} < 1 ) {
15 1         1 $args->{allow_dismiss} = 1;
16             }
17              
18             # else {
19             # # ?TODO/YAGNI?: enforce a sane default if too low?
20             # }
21             }
22 9         5 push @{ $dsl->app->session->read('growls') }, { message => $msg, options => $args };
  9         113  
23             }
24              
25             register growl => \&_growl;
26              
27             register growl_info => sub {
28 1     1   29 $_[2]->{type} = 'info';
29 1         2 goto &_growl;
30             };
31              
32             register growl_success => sub {
33 1     1   27 $_[2]->{type} = 'success';
34 1         6 goto &_growl;
35             };
36              
37             register growl_warning => sub {
38 4     4   95 $_[2]->{type} = 'warning';
39 4         5 goto &_growl;
40             };
41              
42             register growl_error => sub {
43 1     1   28 $_[2]->{type} = 'danger';
44 1         2 goto &_growl;
45             };
46              
47             register growls => sub {
48 3     3   35332 my $dsl = shift;
49 3 100       38 return if !$dsl->app->session->read('growls');
50 2         41 my @growls = @{ $dsl->app->session->read('growls') };
  2         26  
51 2         39 @{ $dsl->app->session->read('growls') } = ();
  2         25  
52 2         64 return \@growls;
53             };
54              
55             on_plugin_import {
56             my $dsl = shift;
57              
58             # TODO 2: Is there a better way to add template keyword?
59             $dsl->app->add_hook(
60              
61             # ?TODO/YAGNI? do growl() and growl_*() in TT also?
62             Dancer2::Core::Hook->new(
63             name => 'before_template_render',
64             code => sub { $_[0]->{growls} ||= growls( $dsl, @_ ) },
65             )
66             );
67             };
68              
69             register_plugin;
70              
71             1;
72              
73             __END__