File Coverage

lib/Template/Config.pm
Criterion Covered Total %
statement 60 67 89.5
branch 25 40 62.5
condition 26 53 49.0
subroutine 17 18 94.4
pod 12 12 100.0
total 140 190 73.6


line stmt bran cond sub pod time code
1             #============================================================= -*-perl-*-
2             #
3             # Template::Config
4             #
5             # DESCRIPTION
6             # Template Toolkit configuration module.
7             #
8             # AUTHOR
9             # Andy Wardley
10             #
11             # COPYRIGHT
12             # Copyright (C) 1996-2007 Andy Wardley. All Rights Reserved.
13             #
14             # This module is free software; you can redistribute it and/or
15             # modify it under the same terms as Perl itself.
16             #
17             #========================================================================
18            
19             package Template::Config;
20              
21 85     85   453 use strict;
  85         146  
  85         2990  
22 85     85   439 use warnings;
  85         148  
  85         2635  
23 85     85   449 use base 'Template::Base';
  85         149  
  85         10217  
24 85         195127 use vars qw( $VERSION $DEBUG $ERROR $INSTDIR
25             $PARSER $PROVIDER $PLUGINS $FILTERS $ITERATOR
26             $LATEX_PATH $PDFLATEX_PATH $DVIPS_PATH
27 85     85   485 $STASH $SERVICE $CONTEXT $CONSTANTS @PRELOAD );
  85         241  
28              
29             $VERSION = 2.75;
30             $DEBUG = 0 unless defined $DEBUG;
31             $ERROR = '';
32             $CONTEXT = 'Template::Context';
33             $FILTERS = 'Template::Filters';
34             $ITERATOR = 'Template::Iterator';
35             $PARSER = 'Template::Parser';
36             $PLUGINS = 'Template::Plugins';
37             $PROVIDER = 'Template::Provider';
38             $SERVICE = 'Template::Service';
39             $STASH = 'Template::Stash::XS';
40             $CONSTANTS = 'Template::Namespace::Constants';
41              
42             @PRELOAD = ( $CONTEXT, $FILTERS, $ITERATOR, $PARSER,
43             $PLUGINS, $PROVIDER, $SERVICE, $STASH );
44              
45             # the following is set at installation time by the Makefile.PL
46             $INSTDIR = '';
47              
48              
49             #========================================================================
50             # --- CLASS METHODS ---
51             #========================================================================
52              
53             #------------------------------------------------------------------------
54             # preload($module, $module, ...)
55             #
56             # Preloads all the standard TT modules that are likely to be used, along
57             # with any other passed as arguments.
58             #------------------------------------------------------------------------
59              
60             sub preload {
61 0     0 1 0 my $class = shift;
62              
63 0         0 foreach my $module (@PRELOAD, @_) {
64 0 0       0 $class->load($module) || return;
65             };
66 0         0 return 1;
67             }
68              
69              
70             #------------------------------------------------------------------------
71             # load($module)
72             #
73             # Load a module via require(). Any occurrences of '::' in the module name
74             # are be converted to '/' and '.pm' is appended. Returns 1 on success
75             # or undef on error. Use $class->error() to examine the error string.
76             #------------------------------------------------------------------------
77              
78             sub load {
79 1203     1203 1 2854 my ($class, $module) = @_;
80 1203         5700 $module =~ s[::][/]g;
81 1203         2113 $module .= '.pm';
82 1203         1766 eval { require $module; };
  1203         382867  
83 1203 50       8097 return $@ ? $class->error("failed to load $module: $@") : 1;
84             }
85              
86              
87             #------------------------------------------------------------------------
88             # parser(\%params)
89             #
90             # Instantiate a new parser object of the class whose name is denoted by
91             # the package variable $PARSER (default: Template::Parser). Returns
92             # a reference to a newly instantiated parser object or undef on error.
93             # The class error() method can be called without arguments to examine
94             # the error message generated by this failure.
95             #------------------------------------------------------------------------
96              
97             sub parser {
98 130     130 1 2000848 my $class = shift;
99 130 100 66     1327 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
100             ? shift : { @_ };
101              
102 130 50       582 return undef unless $class->load($PARSER);
103 130   33     1307 return $PARSER->new($params)
104             || $class->error("failed to create parser: ", $PARSER->error);
105             }
106              
107              
108             #------------------------------------------------------------------------
109             # provider(\%params)
110             #
111             # Instantiate a new template provider object (default: Template::Provider).
112             # Returns an object reference or undef on error, as above.
113             #------------------------------------------------------------------------
114              
115             sub provider {
116 149     149 1 479 my $class = shift;
117 149 100 66     1248 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
118             ? shift : { @_ };
119              
120 149 50       601 return undef unless $class->load($PROVIDER);
121 149   33     1451 return $PROVIDER->new($params)
122             || $class->error("failed to create template provider: ",
123             $PROVIDER->error);
124             }
125              
126              
127             #------------------------------------------------------------------------
128             # plugins(\%params)
129             #
130             # Instantiate a new plugins provider object (default: Template::Plugins).
131             # Returns an object reference or undef on error, as above.
132             #------------------------------------------------------------------------
133              
134             sub plugins {
135 149     149 1 320 my $class = shift;
136 149 100 66     1148 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
137             ? shift : { @_ };
138              
139 149 50       522 return undef unless $class->load($PLUGINS);
140 149   33     1255 return $PLUGINS->new($params)
141             || $class->error("failed to create plugin provider: ",
142             $PLUGINS->error);
143             }
144              
145              
146             #------------------------------------------------------------------------
147             # filters(\%params)
148             #
149             # Instantiate a new filters provider object (default: Template::Filters).
150             # Returns an object reference or undef on error, as above.
151             #------------------------------------------------------------------------
152              
153             sub filters {
154 149     149 1 317 my $class = shift;
155 149 100 66     1179 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
156             ? shift : { @_ };
157              
158 149 50       564 return undef unless $class->load($FILTERS);
159 149   33     1346 return $FILTERS->new($params)
160             || $class->error("failed to create filter provider: ",
161             $FILTERS->error);
162             }
163              
164              
165             #------------------------------------------------------------------------
166             # iterator(\@list)
167             #
168             # Instantiate a new Template::Iterator object (default: Template::Iterator).
169             # Returns an object reference or undef on error, as above.
170             #------------------------------------------------------------------------
171              
172             sub iterator {
173 174     174 1 7301 my $class = shift;
174 174         287 my $list = shift;
175              
176 174 50       701 return undef unless $class->load($ITERATOR);
177 174   33     1502 return $ITERATOR->new($list, @_)
178             || $class->error("failed to create iterator: ", $ITERATOR->error);
179             }
180              
181              
182             #------------------------------------------------------------------------
183             # stash(\%vars)
184             #
185             # Instantiate a new template variable stash object (default:
186             # Template::Stash). Returns object or undef, as above.
187             #------------------------------------------------------------------------
188              
189             sub stash {
190 152     152 1 388 my $class = shift;
191 152 100 66     1103 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
192             ? shift : { @_ };
193              
194 152 50       575 return undef unless $class->load($STASH);
195 152   33     1580 return $STASH->new($params)
196             || $class->error("failed to create stash: ", $STASH->error);
197             }
198              
199              
200             #------------------------------------------------------------------------
201             # context(\%params)
202             #
203             # Instantiate a new template context object (default: Template::Context).
204             # Returns object or undef, as above.
205             #------------------------------------------------------------------------
206              
207             sub context {
208 148     148 1 399 my $class = shift;
209 148 100 100     1340 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
210             ? shift : { @_ };
211              
212 148 50       530 return undef unless $class->load($CONTEXT);
213 148   33     1677 return $CONTEXT->new($params)
214             || $class->error("failed to create context: ", $CONTEXT->error);
215             }
216              
217              
218             #------------------------------------------------------------------------
219             # service(\%params)
220             #
221             # Instantiate a new template context object (default: Template::Service).
222             # Returns object or undef, as above.
223             #------------------------------------------------------------------------
224              
225             sub service {
226 145     145 1 363 my $class = shift;
227 145 100 66     1313 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
228             ? shift : { @_ };
229              
230 145 50       719 return undef unless $class->load($SERVICE);
231 145   33     1787 return $SERVICE->new($params)
232             || $class->error("failed to create context: ", $SERVICE->error);
233             }
234              
235              
236             #------------------------------------------------------------------------
237             # constants(\%params)
238             #
239             # Instantiate a new namespace handler for compile time constant folding
240             # (default: Template::Namespace::Constants).
241             # Returns object or undef, as above.
242             #------------------------------------------------------------------------
243              
244             sub constants {
245 7     7 1 14 my $class = shift;
246 7 50 33     89 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
247             ? shift : { @_ };
248              
249 7 50       53 return undef unless $class->load($CONSTANTS);
250 7   33     93 return $CONSTANTS->new($params)
251             || $class->error("failed to create constants namespace: ",
252             $CONSTANTS->error);
253             }
254              
255              
256             #------------------------------------------------------------------------
257             # instdir($dir)
258             #
259             # Returns the root installation directory appended with any local
260             # component directory passed as an argument.
261             #------------------------------------------------------------------------
262              
263             sub instdir {
264 2     2 1 15 my ($class, $dir) = @_;
265 2   50     16 my $inst = $INSTDIR
266             || return $class->error("no installation directory");
267 0         0 $inst =~ s[/$][]g;
268 0 0       0 $inst .= "/$dir" if $dir;
269 0         0 return $inst;
270             }
271              
272              
273             #========================================================================
274             # This should probably be moved somewhere else in the long term, but for
275             # now it ensures that Template::TieString is available even if the
276             # Template::Directive module hasn't been loaded, as is the case when
277             # using compiled templates and Template::Parser hasn't yet been loaded
278             # on demand.
279             #========================================================================
280              
281             #------------------------------------------------------------------------
282             # simple package for tying $output variable to STDOUT, used by perl()
283             #------------------------------------------------------------------------
284              
285             package Template::TieString;
286              
287             sub TIEHANDLE {
288 13     13   219 my ($class, $textref) = @_;
289 13         79 bless $textref, $class;
290             }
291             sub PRINT {
292 7     7   402 my $self = shift;
293 7         103 $$self .= join('', @_);
294             }
295              
296              
297              
298             1;
299              
300             __END__