File Coverage

blib/lib/Mojolicious/Plugin/EPRenderer.pm
Criterion Covered Total %
statement 40 40 100.0
branch 5 6 83.3
condition 11 15 73.3
subroutine 85 85 100.0
pod 1 1 100.0
total 142 147 96.6


line stmt bran cond sub pod time code
1             package Mojolicious::Plugin::EPRenderer;
2 48     198   384 use Mojo::Base 'Mojolicious::Plugin::EPLRenderer';
  48         122  
  48         392  
3              
4 48     174   334 use Mojo::Template;
  48         173  
  48         299  
5 48     174   329 use Mojo::Util qw(encode md5_sum monkey_patch);
  48         156  
  48         17475  
6              
7 38     164   6131 sub DESTROY { Mojo::Util::_teardown(shift->{namespace}) }
8              
9             sub register {
10 105     231 1 402 my ($self, $app, $conf) = @_;
11              
12             # Auto escape by default to prevent XSS attacks
13 105   100     244 my $ep = {auto_escape => 1, %{$conf->{template} // {}}, vars => 1};
  105         962  
14 105   66     1573 my $ns = $self->{namespace} = $ep->{namespace} //= 'Mojo::Template::Sandbox::' . md5_sum "$self";
15              
16             # Make "$self" and "$c" available in templates
17 105   100     743 $ep->{prepend} = 'my $self = my $c = _C;' . ($ep->{prepend} // '');
18              
19             # Add "ep" handler and make it the default
20             $app->renderer->default_handler('ep')->add_handler(
21             $conf->{name} || 'ep' => sub {
22 495     621   1179 my ($renderer, $c, $output, $options) = @_;
23              
24 495   66     2033 my $name = $options->{inline} // $renderer->template_name($options);
25 495 50       1381 return unless defined $name;
26 495         1622 my $key = md5_sum encode 'UTF-8', $name;
27              
28 495         2186 my $cache = $renderer->cache;
29 495         1708 my $mt = $cache->get($key);
30 495 100       2643 $cache->set($key => $mt = Mojo::Template->new($ep)) unless $mt;
31              
32             # Export helpers only once
33 495 100 33     2107 ++$self->{helpers} and _helpers($ns, $renderer->helpers) unless $self->{helpers};
34              
35             # Make current controller available and render with "epl" handler
36 48     174   453 no strict 'refs';
  48         134  
  48         2264  
37 48     174   386 no warnings 'redefine';
  48         154  
  48         20502  
38 495         2459 local *{"${ns}::_C"} = sub {$c};
  495         3247  
  2383         9260  
39 495         2107 Mojolicious::Plugin::EPLRenderer::_render($renderer, $c, $output, $options, $mt, $c->stash);
40             }
41 105   100     401 );
42             }
43              
44             sub _helpers {
45 38     164   173 my ($class, $helpers) = @_;
46 38         923 for my $method (grep {/^\w+$/} keys %$helpers) {
  3218         6725  
47 2457         5107 my $sub = $helpers->{$method};
48 2457     2195   11097 monkey_patch $class, $method, sub { $class->_C->$sub(@_) };
  2069     2044   20230  
        2044      
        2194      
        2320      
        2446      
        2572      
        2698      
        2824      
        2950      
        3076      
        3202      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3358      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3328      
        3454      
        3454      
        3328      
        3328      
        3328      
        3328      
        3328      
        3502      
        3502      
        3480      
        3454      
        3454      
        3454      
        3454      
        3328      
        3328      
        3328      
        1314      
        1134      
        1008      
        882      
        756      
        630      
        504      
        378      
        252      
        126      
        893      
49             }
50             }
51              
52             1;
53              
54             =encoding utf8
55              
56             =head1 NAME
57              
58             Mojolicious::Plugin::EPRenderer - Embedded Perl renderer plugin
59              
60             =head1 SYNOPSIS
61              
62             # Mojolicious
63             $app->plugin('EPRenderer');
64             $app->plugin(EPRenderer => {name => 'foo'});
65             $app->plugin(EPRenderer => {name => 'bar', template => {line_start => '.'}});
66              
67             # Mojolicious::Lite
68             plugin 'EPRenderer';
69             plugin EPRenderer => {name => 'foo'};
70             plugin EPRenderer => {name => 'bar', template => {line_start => '.'}};
71              
72             =head1 DESCRIPTION
73              
74             L is a renderer for Embedded Perl templates. For more information see
75             L.
76              
77             This is a core plugin, that means it is always enabled and its code a good example for learning to build new plugins,
78             you're welcome to fork it.
79              
80             See L for a list of plugins that are available by default.
81              
82             =head1 OPTIONS
83              
84             L supports the following options.
85              
86             =head2 name
87              
88             # Mojolicious::Lite
89             plugin EPRenderer => {name => 'foo'};
90              
91             Handler name, defaults to C.
92              
93             =head2 template
94              
95             # Mojolicious::Lite
96             plugin EPRenderer => {template => {line_start => '.'}};
97              
98             Attribute values passed to L objects used to render templates.
99              
100             =head1 METHODS
101              
102             L inherits all methods from L and implements the
103             following new ones.
104              
105             =head2 register
106              
107             $plugin->register(Mojolicious->new);
108             $plugin->register(Mojolicious->new, {name => 'foo'});
109              
110             Register renderer in L application.
111              
112             =head1 SEE ALSO
113              
114             L, L, L.
115              
116             =cut