Coverage Summary

# File Coverage

blib/lib/Prancer/Template/TemplateToolkit.pm
Criterion | Covered | Total | %
--- | --- | --- | ---
statement | 18 | 46 | 39.1
branch | 0 | 26 | 0.0
condition | 0 | 6 | 0.0
subroutine | 6 | 12 | 50.0
pod | 0 | 2 | 0.0
total | 24 | 92 | 26.1

line | stmt | bran | cond | sub | pod | time | code
--- | --- | --- | --- | --- | --- | --- | ---
1 |  |  |  |  |  |  | package Prancer::Template::TemplateToolkit;
2 |  |  |  |  |  |  |
3 | 4 |  |  | 4 |  | 2764 | use strict;
| 4 |  |  |  |  | 22 |
| 4 |  |  |  |  | 116 |
4 | 4 |  |  | 4 |  | 10 | use warnings FATAL => 'all';
| 4 |  |  |  |  | 3 |
| 4 |  |  |  |  | 88 |
5 |  |  |  |  |  |  |
6 | 4 |  |  | 4 |  | 10 | use Carp;
| 4 |  |  |  |  | 2 |
| 4 |  |  |  |  | 149 |
7 | 4 |  |  | 4 |  | 15 | use Cwd ();
| 4 |  |  |  |  | 3 |
| 4 |  |  |  |  | 64 |
8 | 4 |  |  | 4 |  | 15 | use Try::Tiny;
| 4 |  |  |  |  | 4 |
| 4 |  |  |  |  | 181 |
9 | 4 |  |  | 4 |  | 11 | use Prancer qw(logger);
| 4 |  |  |  |  | 10 |
| 4 |  |  |  |  | 1685 |
10 |  |  |  |  |  |  |
11 |  |  |  |  |  |  | sub new {
12 | 0 |  |  | 0 | 0 |  | my ($class, $config) = @_;
13 | 0 |  |  |  |  |  | my $self = bless({}, $class);
14 |  |  |  |  |  |  |
15 |  |  |  |  |  |  | # try to load template toolkit
16 |  |  |  |  |  |  | try {
17 | 0 |  |  | 0 |  |  | require Template;
18 |  |  |  |  |  |  | } catch {
19 | 0 | 0 |  | 0 |  |  | my $error = (defined($_) ? $_ : "unknown");
20 | 0 |  |  |  |  |  | logger->fatal("could not load Template: ${error}");
21 | 0 |  |  |  |  |  | croak;
22 | 0 |  |  |  |  |  | };
23 |  |  |  |  |  |  |
24 | 0 | 0 |  |  |  |  | die "no template path is configured\n" unless defined($config->{'template_dir'});
25 | 0 |  |  |  |  |  | my $include_path = Cwd::realpath($config->{'template_dir'});
26 | 0 | 0 |  |  |  |  | die "${include_path} does not exist\n" unless (-e $include_path);
27 | 0 | 0 |  |  |  |  | die "${include_path} is not readable\n" unless (-r $include_path);
28 |  |  |  |  |  |  |
29 | 0 | 0 |  |  |  |  | my $cache_path = (defined($config->{'cache_dir'}) ? Cwd::realpath($config->{'cache_dir'}) : undef);
30 | 0 | 0 |  |  |  |  | if (defined($cache_path)) {
31 | 0 | 0 |  |  |  |  | die "${cache_path} does not exist\n" unless (-e $cache_path);
32 | 0 | 0 |  |  |  |  | die "${cache_path} is not readable\n" unless (-r $cache_path);
33 | 0 | 0 |  |  |  |  | die "${cache_path} is not writable\n" unless (-w $cache_path);
34 |  |  |  |  |  |  | }
35 |  |  |  |  |  |  |
36 | 0 |  | 0 |  |  |  | my $engine = Template->new({
|  |  | 0 |  |  |  |
|  |  | 0 |  |  |  |
37 |  |  |  |  |  |  | 'INCLUDE_PATH' => $include_path,
38 |  |  |  |  |  |  | 'ANYCASE' => 1,
39 |  |  |  |  |  |  | 'START_TAG' => $config->{'start_tag'} || '<%',
40 |  |  |  |  |  |  | 'END_TAG' => $config->{'end_tag'} || '%>',
41 |  |  |  |  |  |  | 'ENCODING' => $config->{'encoding'} || 'utf8',
42 |  |  |  |  |  |  | 'PRE_PROCESS' => $config->{'pre_process'},
43 |  |  |  |  |  |  | 'POST_PROCESS' => $config->{'post_process'},
44 |  |  |  |  |  |  | 'CACHE_SIZE' => $config->{'cache_size'},
45 |  |  |  |  |  |  | 'COMPILE_EXT' => 'ttc',
46 |  |  |  |  |  |  | 'COMPILE_DIR' => $cache_path,
47 |  |  |  |  |  |  | });
48 | 0 |  |  |  |  |  | $self->{'_engine'} = $engine;
49 |  |  |  |  |  |  |
50 | 0 |  |  |  |  |  | logger->info("initialized template engine with templates from ${include_path}");
51 | 0 | 0 |  |  |  |  | logger->info("templates will be cached to ${cache_path}") if ($cache_path);
52 |  |  |  |  |  |  |
53 | 0 |  |  |  |  |  | return $self;
54 |  |  |  |  |  |  | }
55 |  |  |  |  |  |  |
56 |  |  |  |  |  |  | sub render {
57 | 0 |  |  | 0 | 0 |  | my ($self, $input, $vars) = @_;
58 | 0 |  |  |  |  |  | my $output = undef;
59 |  |  |  |  |  |  |
60 |  |  |  |  |  |  | try {
61 | 0 | 0 |  | 0 |  |  | $self->{'_engine'}->process($input, $vars, \$output) or croak $self->{'_engine'}->error();
62 |  |  |  |  |  |  | } catch {
63 | 0 | 0 |  | 0 |  |  | my $error = (defined($_) ? $_ : "unknown");
64 | 0 |  |  |  |  |  | logger->error("could not render template: ${error}");
65 | 0 |  |  |  |  |  | };
66 |  |  |  |  |  |  |
67 | 0 | 0 |  |  |  |  | return defined($output) ? $output : '';
68 |  |  |  |  |  |  | }
69 |  |  |  |  |  |  |
70 |  |  |  |  |  |  | 1;
71 |  |  |  |  |  |  |
72 |  |  |  |  |  |  | =head1 NAME
73 |  |  |  |  |  |  |
74 |  |  |  |  |  |  | Prancer::Template::TemplateToolkit
75 |  |  |  |  |  |  |
76 |  |  |  |  |  |  | =head1 SYNOPSIS
77 |  |  |  |  |  |  |
78 |  |  |  |  |  |  | This template engine plugin requires L<Template>. If this plugin is configured
79 |  |  |  |  |  |  | but L<Template> is not found your application will not start. To use this
80 |  |  |  |  |  |  | template engine plugin, set your configuration to something like this:
81 |  |  |  |  |  |  |
82 |  |  |  |  |  |  | template:
83 |  |  |  |  |  |  | driver: Prancer::Template::TemplateToolkit
84 |  |  |  |  |  |  | options:
85 |  |  |  |  |  |  | template_dir: /srv/www/site/templates
86 |  |  |  |  |  |  | encoding: utf8
87 |  |  |  |  |  |  | start_tag: "<%"
88 |  |  |  |  |  |  | end_tag: "%>"
89 |  |  |  |  |  |  |
90 |  |  |  |  |  |  | Then your templates should be placed under C</srv/www/site/templates> as
91 |  |  |  |  |  |  | configured.
92 |  |  |  |  |  |  |
93 |  |  |  |  |  |  | =head1 OPTIONS
94 |  |  |  |  |  |  |
95 |  |  |  |  |  |  | =over 4
96 |  |  |  |  |  |  |
97 |  |  |  |  |  |  | =item template_dir
98 |  |  |  |  |  |  |
99 |  |  |  |  |  |  | B<REQUIRED> Sets the directory to look for templates. If this path is not
100 |  |  |  |  |  |  | configured then your application will not start.
101 |  |  |  |  |  |  |
102 |  |  |  |  |  |  | =item start_tag
103 |  |  |  |  |  |  |
104 |  |  |  |  |  |  | Sets the start tag for your templates. The default is C<E<lt>%>.
105 |  |  |  |  |  |  |
106 |  |  |  |  |  |  | =item end_tag
107 |  |  |  |  |  |  |
108 |  |  |  |  |  |  | Sets the end tag for your templates. The default is C<%E<gt>>.
109 |  |  |  |  |  |  |
110 |  |  |  |  |  |  | =item encoding
111 |  |  |  |  |  |  |
112 |  |  |  |  |  |  | Sets the encoding of your templates. The default is C<utf8>.
113 |  |  |  |  |  |  |
114 |  |  |  |  |  |  | =item pre_process
115 |  |  |  |  |  |  |
116 |  |  |  |  |  |  | Names a template to add to the top of all templates.
117 |  |  |  |  |  |  |
118 |  |  |  |  |  |  | =item post_process
119 |  |  |  |  |  |  |
120 |  |  |  |  |  |  | Names a template to be added to the bottom of all templates.
121 |  |  |  |  |  |  |
122 |  |  |  |  |  |  | =item cache_size
123 |  |  |  |  |  |  |
124 |  |  |  |  |  |  | Sets the number of templates to cache. The default is cache all of them if the
125 |  |  |  |  |  |  | cache is enabled.
126 |  |  |  |  |  |  |
127 |  |  |  |  |  |  | =item cache_dir
128 |  |  |  |  |  |  |
129 |  |  |  |  |  |  | Sets the directory to cache templates. The default is to not cache templates.
130 |  |  |  |  |  |  |
131 |  |  |  |  |  |  | =back
132 |  |  |  |  |  |  |
133 |  |  |  |  |  |  | =cut
134 |  |  |  |  |  |  |