File Coverage

blib/lib/Mojolicious/Plugin/TemplateToolkit.pm
Criterion Covered Total %
statement 44 47 93.6
branch 11 16 68.7
condition 6 7 85.7
subroutine 7 7 100.0
pod 1 1 100.0
total 69 78 88.4


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::TemplateToolkit;
2 2     2   11590 use Mojo::Base 'Mojolicious::Plugin';
  2         4  
  2         10  
3              
4 2     2   289 use Carp;
  2         5  
  2         109  
5 2     2   11 use Mojo::Util qw(encode md5_sum);
  2         3  
  2         123  
6 2     2   831 use Template;
  2         30984  
  2         55  
7 2     2   751 use Template::Provider::Mojo;
  2         5  
  2         1290  
8              
9             our $VERSION = '0.004';
10              
11             sub register {
12 3     3 1 3066 my ($self, $app, $conf) = @_;
13            
14 3   100     17 my $tt_config = $conf->{template} || {};
15 3         13 $tt_config->{MOJO_RENDERER} = $app->renderer;
16 3         17 push @{$tt_config->{LOAD_TEMPLATES}}, Template::Provider::Mojo->new($tt_config);
  3         19  
17 3         94 my $tt = Template->new($tt_config);
18            
19             $app->renderer->add_handler($conf->{name} || 'tt2' => sub {
20 14     14   49008 my ($renderer, $c, $output, $options) = @_;
21            
22 14         30 my $inline = $options->{inline};
23 14 100       46 my $name = defined $inline ? md5_sum encode('UTF-8', $inline) : undef;
24 14 50 66     160 return unless defined($name //= $renderer->template_name($options));
25            
26 14         1791 my %params;
27            
28             # Helpers
29 14         19 foreach my $method (grep { m/^\w+\z/ } keys %{$renderer->helpers}) {
  952         1845  
  14         37  
30 826         1436 my $sub = $renderer->helpers->{$method};
31 826         3734 $params{$method} = sub { carp "Calling helpers directly in templates is deprecated. Use c.$method or c.helpers.$method"; $c->$sub(@_) };
  0         0  
  0         0  
32             }
33            
34             # Stash values
35 14         36 $params{$_} = $c->stash->{$_} for grep { m/^\w+\z/ } keys %{$c->stash};
  47         245  
  14         36  
36 14         147 $params{self} = $params{c} = $c;
37            
38             # Inline
39 14 100       31 if (defined $inline) {
40 11         34 $c->app->log->debug(qq{Rendering inline template "$name"});
41 11 50       344 $tt->process(\$inline, \%params, $output) or die $tt->error, "\n";
42             }
43            
44             # File
45             else {
46             # Try template
47 3 100       8 if (defined(my $path = $renderer->template_path($options))) {
    50          
48 1         81 $c->app->log->debug(qq{Rendering template "$name"});
49 1 50       32 $tt->process($name, \%params, $output) or die $tt->error, "\n";
50             }
51            
52             # Try DATA section
53             elsif (defined(my $d = $renderer->get_data_template($options))) {
54 2         237 $c->app->log->debug(qq{Rendering template "$name" from DATA section});
55 2 50       60 $tt->process(\$d, \%params, $output) or die $tt->error, "\n";
56             }
57            
58             # No template
59 0           else { $c->app->log->debug(qq{Template "$name" not found}) }
60             }
61 3   100     36680 });
62             }
63              
64             1;
65              
66             =head1 NAME
67              
68             Mojolicious::Plugin::TemplateToolkit - Template Toolkit renderer plugin for
69             Mojolicious
70              
71             =head1 SYNOPSIS
72              
73             # Mojolicious
74             $app->plugin('TemplateToolkit');
75             $app->plugin(TemplateToolkit => {name => 'foo'});
76             $app->plugin(TemplateToolkit => {template => {INTERPOLATE => 1}});
77            
78             # Mojolicious::Lite
79             plugin 'TemplateToolkit';
80             plugin TemplateToolkit => {name => 'foo'};
81             plugin TemplateToolkit => {template => {INTERPOLATE => 1}});
82            
83             # Set as default handler
84             $app->renderer->default_handler('tt2');
85            
86             # Render without setting as default handler
87             $c->render(template => 'bar', handler => 'tt2');
88              
89             =head1 DESCRIPTION
90              
91             L is a renderer for C or
92             C