File Coverage

blib/lib/MojoX/Renderer/Handlebars.pm
Criterion Covered Total %
statement 18 46 39.1
branch 0 8 0.0
condition 0 6 0.0
subroutine 6 12 50.0
pod 1 1 100.0
total 25 73 34.2


line stmt bran cond sub pod time code
1             package MojoX::Renderer::Handlebars;
2              
3 1     1   18278 use strict;
  1         1  
  1         35  
4 1     1   9 use warnings;
  1         2  
  1         27  
5              
6 1     1   4 use File::Spec ();
  1         4  
  1         24  
7 1     1   552 use Mojo::Base -base;
  1         7154  
  1         7  
8 1     1   584 use Mojo::Loader qw(data_section);
  1         43559  
  1         56  
9 1     1   523 use Text::Handlebars ();
  1         11220  
  1         411  
10              
11             our $VERSION = '0.03';
12              
13              
14             has 'handlebars';
15              
16             sub build {
17 0     0 1   my $self = shift->SUPER::new(@_);
18 0           $self->_init(@_);
19 0     0     return sub { $self->_render(@_) };
  0            
20             }
21              
22             sub _init {
23 0     0     my ($self, %args) = @_;
24              
25 0   0       my $app = $args{mojo} || $args{app};
26 0           my $cache_dir;
27 0           my @path = $app->home->rel_dir('templates');
28              
29 0 0         if ($app) {
30 0           $cache_dir = $app->home->rel_dir('tmp/compiled_templates');
31 0           push @path, data_section(
32             $app->renderer->classes->[0],
33             );
34             }
35             else {
36 0           $cache_dir = File::Spec->tmpdir;
37             }
38              
39             my %config = (
40             cache_dir => $cache_dir,
41             path => \@path,
42 0     0     warn_handler => sub { },
43 0     0     die_handler => sub { },
44 0 0         %{$args{template_options} || {}},
  0            
45             );
46              
47 0           $self->handlebars(Text::Handlebars->new(\%config));
48              
49 0           return $self;
50             }
51              
52             sub _render {
53 0     0     my ($self, $renderer, $c, $output, $options) = @_;
54              
55 0   0       my $name = $c->stash->{'template_name'}
56             || $renderer->template_name($options);
57 0           my %params = (%{$c->stash}, c => $c);
  0            
58              
59 0           local $@;
60 0 0         if (defined(my $inline = $options->{inline})) {
61 0           $$output = $self->handlebars->render_string($inline, \%params);
62             }
63             else {
64 0           $$output = $self->handlebars->render($name, \%params);
65             }
66 0 0         die $@ if $@;
67              
68 0           return 1;
69             }
70              
71             1;
72              
73              
74             __END__