/[webpac2]/trunk/lib/WebPAC/Output/TT.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/WebPAC/Output/TT.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 62 - (hide annotations)
Tue Nov 15 14:31:12 2005 UTC (18 years, 5 months ago) by dpavlin
File size: 3453 byte(s)
 r8884@llin:  dpavlin | 2005-11-15 14:46:07 +0100
 fix small warnings

1 dpavlin 16 package WebPAC::Output::TT;
2 dpavlin 1
3     use warnings;
4     use strict;
5    
6 dpavlin 16 use base qw/WebPAC::Common/;
7    
8     use Template;
9 dpavlin 42 use List::Util qw/first/;
10 dpavlin 16 use Data::Dumper;
11    
12 dpavlin 1 =head1 NAME
13    
14 dpavlin 16 WebPAC::Output::TT - use Template Toolkit to produce output
15 dpavlin 1
16     =head1 VERSION
17    
18     Version 0.01
19    
20     =cut
21    
22     our $VERSION = '0.01';
23    
24     =head1 SYNOPSIS
25    
26 dpavlin 16 Produce output using Template Toolkit.
27 dpavlin 1
28 dpavlin 16 =head1 FUNCTIONS
29 dpavlin 1
30 dpavlin 16 =head2 new
31 dpavlin 1
32 dpavlin 16 Create new instance.
33 dpavlin 1
34 dpavlin 16 my $tt = new WebPAC::Output::TT(
35     include_path => '/path/to/conf/output/tt',
36     filters => {
37     filter_1 => sub { uc(shift) },
38     },
39     );
40 dpavlin 1
41 dpavlin 16 By default, Template Toolkit will C<EVAL_PERL> if included in templates.
42 dpavlin 1
43 dpavlin 16 =cut
44 dpavlin 1
45 dpavlin 16 sub new {
46     my $class = shift;
47     my $self = {@_};
48     bless($self, $class);
49 dpavlin 1
50 dpavlin 16 my $log = $self->_get_logger;
51    
52     # create Template toolkit instance
53     $self->{'tt'} = Template->new(
54     INCLUDE_PATH => $self->{'include_path'},
55     FILTERS => $self->{'filter'},
56     EVAL_PERL => 1,
57     );
58    
59     $log->logdie("can't create TT object: $Template::ERROR") unless ($self->{'tt'});
60    
61     $log->debug("filters defined: ",Dumper($self->{'filter'}));
62    
63     $self ? return $self : return undef;
64     }
65    
66    
67     =head2 apply
68    
69     Create output from in-memory data structure using Template Toolkit template.
70    
71 dpavlin 21 my $text = $tt->apply(
72     template => 'text.tt',
73 dpavlin 33 data => \@ds
74 dpavlin 21 );
75 dpavlin 16
76 dpavlin 45 It also has follwing template toolikit filter routies defined:
77    
78 dpavlin 1 =cut
79    
80 dpavlin 16 sub apply {
81     my $self = shift;
82    
83     my $args = {@_};
84    
85     my $log = $self->_get_logger();
86    
87     foreach my $a (qw/template data/) {
88     $log->logconfess("need $a") unless ($args->{$a});
89     }
90    
91 dpavlin 45 =head3 tt_filter_type
92 dpavlin 42
93 dpavlin 45 filter to return values of specified from @ds
94    
95     =cut
96    
97 dpavlin 43 sub tt_filter_type {
98     my ($data,$type) = @_;
99    
100     die "no data?" unless ($data);
101     $type ||= 'display';
102 dpavlin 42
103 dpavlin 43 my $default_delimiter = {
104     'display' => '&#182;<br/>',
105     'index' => '\n',
106     };
107 dpavlin 42
108 dpavlin 43 return sub {
109 dpavlin 42
110 dpavlin 43 my ($name,$join) = @_;
111 dpavlin 42
112 dpavlin 43 die "no data array" unless ($data->{'data'} && ref($data->{'data'}) eq 'ARRAY');
113 dpavlin 62 # Hm? Should we die here?
114     return unless ($name);
115 dpavlin 43
116     my $item = first { $_->{'name'} eq $name } @{ $data->{'data'} };
117    
118     return unless($item);
119    
120     my $v = $item->{$type} || return;
121 dpavlin 42
122 dpavlin 43 if (ref($v) eq 'ARRAY') {
123     if ($#{$v} == 0) {
124     $v = $v->[0];
125     } else {
126     $join = $default_delimiter->{$type} unless defined($join);
127     $v = join($join, @{$v});
128     }
129 dpavlin 42 }
130 dpavlin 45
131 dpavlin 43 return $v;
132 dpavlin 42 }
133     }
134    
135 dpavlin 43 $args->{'d'} = tt_filter_type($args, 'display');
136 dpavlin 42
137 dpavlin 16 my $out;
138    
139     $self->{'tt'}->process(
140     $args->{'template'},
141     $args,
142     \$out
143     ) || $log->logconfess( "apply can't process template: ", $self->{'tt'}->error() );
144    
145     return $out;
146 dpavlin 1 }
147    
148 dpavlin 16 =head2 to_file
149 dpavlin 1
150 dpavlin 16 Create output from in-memory data structure using Template Toolkit template
151     to a file.
152    
153     $tt->to_file(
154     file => 'out.txt',
155     template => 'text.tt',
156 dpavlin 33 data => \@ds
157 dpavlin 16 );
158    
159 dpavlin 1 =cut
160    
161 dpavlin 16 sub to_file {
162     my $self = shift;
163    
164     my $args = {@_};
165    
166     my $log = $self->_get_logger();
167    
168     my $file = $args->{'file'} || $log->logconfess("need file name");
169    
170     $log->debug("creating file ",$file);
171    
172     open(my $fh, ">", $file) || $log->logdie("can't open output file '$file': $!");
173     print $fh $self->output(
174     template => $args->{'template'},
175     data => $args->{'data'},
176     ) || $log->logdie("print: $!");
177     close($fh) || $log->logdie("close: $!");
178    
179     return 1;
180 dpavlin 1 }
181    
182 dpavlin 16
183 dpavlin 1 =head1 AUTHOR
184    
185     Dobrica Pavlinusic, C<< <dpavlin@rot13.org> >>
186    
187     =head1 COPYRIGHT & LICENSE
188    
189     Copyright 2005 Dobrica Pavlinusic, All Rights Reserved.
190    
191     This program is free software; you can redistribute it and/or modify it
192     under the same terms as Perl itself.
193    
194     =cut
195    
196 dpavlin 16 1; # End of WebPAC::Output::TT

  ViewVC Help
Powered by ViewVC 1.1.26