File Coverage

File:lib/Mojolicious/Plugin/ToolkitRenderer.pm
Coverage:61.8%

linestmtbrancondsubpodtimecode
1package Mojolicious::Plugin::ToolkitRenderer;
2# ABSTRACT: Template Toolkit Renderer Mojolicious Plugin
3
4
1
1
1
1061
9
49
use strict;
5
1
1
1
10
6
44
use warnings;
6
7
1
1
1
9
5
12
use Mojo::Base 'Mojolicious::Plugin';
8
1
1
1
196
6
11
use Mojo::Exception;
9
1
1
1
676
26539
329
use Template ();
10
11# VERSION
12
13sub register {
14
1
1
51
    my ( $self, $app, $settings ) = @_;
15
16
1
18
    my $template = Template->new( $settings->{'config'} || {
17        'RELATIVE'  => 1,
18        'EVAL_PERL' => 0,
19    } );
20
21
1
31814
    $settings->{'context'}->( $template->context ) if ( $settings->{'context'} );
22
23    $app->renderer->add_handler( 'tt' => sub {
24
1
149
        my ( $renderer, $controller, $output, $options ) = @_;
25
1
10
        my $inline = $settings->{'settings'}{'inline_template'} || 'inline';
26
27        $template->process(
28            ( ( $options->{$inline} ) ? \$options->{$inline} : $renderer->template_name($options) ),
29            {
30                'content' => $controller->content,
31
1
81
                %{ $controller->stash },
32                ( $settings->{'settings'}{'controller'} || 'c' ) => $controller,
33            },
34            $output,
35
1
16
        ) || do {
36
0
0
            $app->log->error( $template->error );
37
38
0
0
            if (
39                $app->mode ne 'development' and
40                ref( $settings->{'settings'}{'error_handler'} ) eq 'CODE'
41            ) {
42
0
0
                $settings->{'settings'}{'error_handler'}->( $controller, $renderer, $app );
43            }
44            else {
45
0
0
                my $default_handler = $renderer->default_handler;
46
0
0
                $renderer->default_handler('ep');
47
48
0
0
                $controller->reply->exception(
49                    Mojo::Exception->new( __PACKAGE__ . ' - ' . $template->error || '' )
50                );
51
52
0
0
                $renderer->default_handler($default_handler);
53
54
0
0
                $controller->rendered(
55                    ( $template->error and $template->error =~ /not found/ ) ? 404 : 500
56                );
57            }
58        };
59
60
1
132
        return $$output;
61
1
131
    } );
62
63    $app->helper(
64        'render_tt' => sub {
65
1
201
            shift->render( 'handler' => 'tt', @_ );
66        }
67
1
121
    );
68
69
1
41
    return;
70}
71
721;