File Coverage

blib/lib/Dancer/Template/Mustache.pm
Criterion Covered Total %
statement 24 25 96.0
branch n/a
condition 2 3 66.6
subroutine 8 9 88.8
pod 2 2 100.0
total 36 39 92.3


line stmt bran cond sub pod time code
1             package Dancer::Template::Mustache;
2             our $AUTHORITY = 'cpan:YANICK';
3             # ABSTRACT: Wrapper for the Mustache template system
4             $Dancer::Template::Mustache::VERSION = '1.0.1';
5 3     3   83941 use strict;
  3         7  
  3         71  
6 3     3   16 use warnings;
  3         5  
  3         93  
7              
8 3     3   1361 use Template::Mustache 1.0.2;
  3         406158  
  3         97  
9 3     3   29 use FindBin;
  3         8  
  3         165  
10              
11             require Dancer;
12              
13 3     3   22 use Moo;
  3         11  
  3         16  
14              
15 3     3   1049 use Path::Tiny;
  3         8  
  3         756  
16              
17             require Dancer::Config;
18             Dancer::Config->import( 'setting' );
19              
20             extends 'Dancer::Template::Abstract';
21              
22 0     0   0 sub _build_name { 'Dancer::Template::Mustache' }
23              
24 11     11 1 290326 sub default_tmpl_ext { "mustache" };
25              
26             has _template_path => (
27             is => 'ro',
28             lazy => 1,
29             default => sub {
30             setting( 'views' ) || $FindBin::Bin . '/views'
31             },
32             );
33              
34             my %file_template; # cache for the templates
35              
36             sub render {
37 7     7 1 2997 my ($self, $template, $tokens) = @_;
38              
39 7         177 my $_template_path = $self->_template_path;
40              
41             # remove the views part
42 7         160 $template =~ s#^\Q$_template_path\E/?##;
43              
44 7   66     137 my $mustache = $file_template{$template} ||= Template::Mustache->new(
45             template_path => path( $self->_template_path, $template )
46             );
47              
48 7         8483 return $mustache->render($tokens);
49             }
50              
51             1;
52              
53             __END__
54              
55             =pod
56              
57             =encoding UTF-8
58              
59             =head1 NAME
60              
61             Dancer::Template::Mustache - Wrapper for the Mustache template system
62              
63             =head1 VERSION
64              
65             version 1.0.1
66              
67             =head1 SYNOPSIS
68              
69             # in config.yml
70             template: mustache
71              
72             # in the app
73             get '/style/:style' => sub {
74             template 'style' => {
75             style => param('style')
76             };
77             };
78              
79             # in views/style.mustache
80             That's a nice, manly {{style}} mustache you have there!
81              
82             =head1 DESCRIPTION
83              
84             This module is a L<Dancer> wrapper for L<Template::Mustache>.
85              
86             For now, the extension of the mustache templates must be C<.mustache>.
87              
88             Partials are supported, as are layouts. For layouts, the content of the inner
89             template is sent via the usual I<content> template variable. So a typical
90             mustached layout would look like:
91              
92             <body>
93             {{{ content }}}
94             </body>
95              
96             =head1 SEE ALSO
97              
98             The Mustache templating system: L<http://mustache.github.com/>
99              
100             L<Dancer::Template::Handlebars> - Dancer support for Handlebars, a templating system
101             that is a superset of Mustache.
102              
103             =head1 AUTHOR
104              
105             Yanick Champoux <yanick@babyl.dyndns.org>
106              
107             =head1 COPYRIGHT AND LICENSE
108              
109             This software is copyright (c) 2017, 2014, 2012 by Yanick Champoux.
110              
111             This is free software; you can redistribute it and/or modify it under
112             the same terms as the Perl 5 programming language system itself.
113              
114             =cut