File Coverage

blib/lib/Mojolicious/Plugin/HTMLTemplateProRenderer.pm
Criterion Covered Total %
statement 54 60 90.0
branch 16 28 57.1
condition 10 14 71.4
subroutine 7 7 100.0
pod 1 2 50.0
total 88 111 79.2


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::HTMLTemplateProRenderer;
2              
3 3     3   1868 use 5.006;
  3         9  
  3         104  
4 3     3   12 use Mojo::Base 'Mojolicious::Plugin';
  3         3  
  3         17  
5              
6 3     3   1989 use HTML::Template::Pro;
  3         11014  
  3         167  
7 3     3   1618 use HTML::Template::Pro::Extension;
  3         4457  
  3         1972  
8              
9             our $VERSION = '0.03';
10              
11             sub register {
12 3     3 1 142 my ( $self, $app, $conf ) = @_;
13 3         19 $self->{plugin_config} = $conf;
14 3     6   71 $app->renderer->add_handler( tmpl => sub { $self->render_tmpl(@_) } );
  6         128082  
15             }
16              
17             sub render_tmpl {
18 6     6 0 16 my ( $self, $r, $c, $output, $options ) = @_;
19 6         20 my $conf = $self->{plugin_config};
20 6         11 my %tmpl_params = %{ $c->stash };
  6         20  
21              
22 6 100 100     139 unshift @{ $r->paths }, $c->app->home
  2         50  
23             if ( $conf->{tmpl_opts}->{use_home_template}
24             || delete $tmpl_params{use_home_template} );
25              
26 6         129 my $controller = $c->stash('controller');
27              
28 6         57 my @template_dirs;
29              
30 6         124 push @template_dirs, $c->app->home->rel_dir('templates');
31              
32 6 50       592 if ($controller) {
33 0         0 push @template_dirs, $c->app->home->rel_dir("templates/$controller");
34             }
35              
36 6         11 my $t;
37             my %t_options;
38              
39 6 100 66     51 if ( $conf->{tmpl_opts}->{use_extension}
40             || delete $tmpl_params{use_extension} )
41             {
42 1 50       5 if ( defined( $options->{inline} ) ) {
    0          
43 1         3 $t_options{tmplfile} = \$options->{inline};
44             }
45             elsif ( defined( $options->{template} ) ) {
46 0 0       0 if ( defined( my $path = $r->template_path($options) ) ) {
47 0         0 $t_options{tmplfile} = $path;
48 0         0 $t_options{cache} = 1;
49             }
50             else {
51 0         0 $t_options{tmplfile} = \$r->get_data_template($options);
52             }
53             }
54              
55 1   50     6 my $plugins = $conf->{tmpl_opts}->{plugins} || [];
56 1 50       4 $plugins = [ @$plugins, @{ $tmpl_params{plugins} } ]
  1         4  
57             if exists $tmpl_params{plugins};
58 1         3 $t_options{plugins} = $plugins;
59 1         10 $t = new HTML::Template::Pro::Extension(%t_options);
60             }
61             else {
62 5         14 $t_options{die_on_bad_params} = 0;
63 5         10 $t_options{global_vars} = 1;
64 5         7 $t_options{loop_context_vars} = 1;
65 5         15 $t_options{path} = \@template_dirs;
66 5         18 $t_options{search_path_on_include} = 1;
67              
68 5 100       25 if ( defined( $options->{inline} ) ) {
    50          
69 1         4 $t_options{scalarref} = \$options->{inline};
70             }
71             elsif ( defined( $options->{template} ) ) {
72 4 100       17 if ( defined( my $path = $r->template_path($options) ) ) {
73 3         2344 $t_options{filename} = $path;
74 3         9 $t_options{cache} = 1;
75             }
76             else {
77 1         105 $t_options{scalarref} = $r->get_data_template($options);
78             }
79              
80             }
81              
82 5 50       23 $t = HTML::Template::Pro->new(
83             %t_options,
84 5 50       78 %{ $conf->{tmpl_opts} || {} },
85 5         45 %{ delete $tmpl_params{tmpl_opts} || {} }
86             );
87              
88             }
89 6 50       1662 unless ($t) { $r->render_exception("ERROR: No template created"); }
  0         0  
90              
91             # sanity params removing scalar inside arrayref
92 6         25 foreach ( keys %tmpl_params ) {
93 43 50 66     167 delete $tmpl_params{$_}
      66        
94             if ( ( ref $tmpl_params{$_} eq 'ARRAY' )
95             && $tmpl_params{$_} > 0
96             && ref($tmpl_params{$_}->[0]) ne 'HASH' );
97             }
98              
99 6         41 $t->param(%tmpl_params);
100              
101 6         269 $$output = $t->output();
102             }
103              
104             1;
105             __END__