0582fb8c23d06d1c96b0d73d38c2f6398cf2a614
[webpac2] / lib / WebPAC / Output / TT.pm
1 package WebPAC::Output::TT;
2
3 use warnings;
4 use strict;
5
6 use base qw/WebPAC::Common/;
7
8 use Template;
9 use Data::Dumper;
10
11 =head1 NAME
12
13 WebPAC::Output::TT - use Template Toolkit to produce output
14
15 =head1 VERSION
16
17 Version 0.01
18
19 =cut
20
21 our $VERSION = '0.01';
22
23 =head1 SYNOPSIS
24
25 Produce output using Template Toolkit.
26
27 =head1 FUNCTIONS
28
29 =head2 new
30
31 Create new instance.
32
33  my $tt = new WebPAC::Output::TT(
34         include_path => '/path/to/conf/output/tt',
35         filters => {
36                 filter_1 => sub { uc(shift) },
37         },
38  );
39
40 By default, Template Toolkit will C<EVAL_PERL> if included in templates.
41
42 =cut
43
44 sub new {
45         my $class = shift;
46         my $self = {@_};
47         bless($self, $class);
48
49         my $log = $self->_get_logger;
50
51         # create Template toolkit instance
52         $self->{'tt'} = Template->new(
53                 INCLUDE_PATH => $self->{'include_path'},
54                 FILTERS => $self->{'filter'},
55                 EVAL_PERL => 1,
56         );
57         
58         $log->logdie("can't create TT object: $Template::ERROR") unless ($self->{'tt'});
59
60         $log->debug("filters defined: ",Dumper($self->{'filter'}));
61
62         $self ? return $self : return undef;
63 }
64
65
66 =head2 apply
67
68 Create output from in-memory data structure using Template Toolkit template.
69
70  my $text = $tt->apply(
71         template => 'text.tt',
72         data => \@ds
73  );
74
75 =cut
76
77 sub apply {
78         my $self = shift;
79
80         my $args = {@_};
81
82         my $log = $self->_get_logger();
83
84         foreach my $a (qw/template data/) {
85                 $log->logconfess("need $a") unless ($args->{$a});
86         }
87
88         my $out;
89
90         $self->{'tt'}->process(
91                 $args->{'template'},
92                 $args,
93                 \$out
94         ) || $log->logconfess( "apply can't process template: ", $self->{'tt'}->error() );
95
96         return $out;
97 }
98
99 =head2 to_file
100
101 Create output from in-memory data structure using Template Toolkit template
102 to a file.
103
104  $tt->to_file(
105         file => 'out.txt',
106         template => 'text.tt',
107         data => \@ds
108  );
109
110 =cut
111
112 sub to_file {
113         my $self = shift;
114
115         my $args = {@_};
116
117         my $log = $self->_get_logger();
118
119         my $file = $args->{'file'} || $log->logconfess("need file name");
120
121         $log->debug("creating file ",$file);
122
123         open(my $fh, ">", $file) || $log->logdie("can't open output file '$file': $!");
124         print $fh $self->output(
125                 template => $args->{'template'},
126                 data => $args->{'data'},
127         ) || $log->logdie("print: $!");
128         close($fh) || $log->logdie("close: $!");
129
130         return 1;
131 }
132
133
134 =head1 AUTHOR
135
136 Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>
137
138 =head1 COPYRIGHT & LICENSE
139
140 Copyright 2005 Dobrica Pavlinusic, All Rights Reserved.
141
142 This program is free software; you can redistribute it and/or modify it
143 under the same terms as Perl itself.
144
145 =cut
146
147 1; # End of WebPAC::Output::TT