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 86     86   540 use strict;
  86         162  
  86         4332  
22 86     86   495 use warnings;
  86         139  
  86         2724  
23 86     86   431 use base 'Template::Base';
  86         141  
  86         20704  
24 86         157610 use vars qw( $VERSION $DEBUG $ERROR $INSTDIR
25             $PARSER $PROVIDER $PLUGINS $FILTERS $ITERATOR
26             $LATEX_PATH $PDFLATEX_PATH $DVIPS_PATH
27 86     86   622 $STASH $SERVICE $CONTEXT $CONSTANTS @PRELOAD );
  86         236  
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 2930 my ($class, $module) = @_;
80 1203         5450 $module =~ s[::][/]g;
81 1203         2334 $module .= '.pm';
82 1203         1736 eval { require $module; };
  1203         312854  
83 1203 50       8877 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 2000871 my $class = shift;
99 130 100 66     1217 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
100             ? shift : { @_ };
101              
102 130 50       563 return undef unless $class->load($PARSER);
103 130   33     1349 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 391 my $class = shift;
117 149 100 66     1209 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
118             ? shift : { @_ };
119              
120 149 50       586 return undef unless $class->load($PROVIDER);
121 149   33     1849 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 328 my $class = shift;
136 149 100 66     3094 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
137             ? shift : { @_ };
138              
139 149 50       514 return undef unless $class->load($PLUGINS);
140 149   33     1295 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 5451 my $class = shift;
155 149 100 66     1255 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
156             ? shift : { @_ };
157              
158 149 50       529 return undef unless $class->load($FILTERS);
159 149   33     1332 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 5699 my $class = shift;
174 174         261 my $list = shift;
175              
176 174 50       667 return undef unless $class->load($ITERATOR);
177 174   33     1073 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 374 my $class = shift;
191 152 100 66     1113 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
192             ? shift : { @_ };
193              
194 152 50       688 return undef unless $class->load($STASH);
195 152   33     1345 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 342 my $class = shift;
209 148 100 100     1992 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
210             ? shift : { @_ };
211              
212 148 50       556 return undef unless $class->load($CONTEXT);
213 148   33     2086 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 349 my $class = shift;
227 145 100 66     1352 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
228             ? shift : { @_ };
229              
230 145 50       753 return undef unless $class->load($SERVICE);
231 145   33     1837 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 13 my $class = shift;
246 7 50 33     55 my $params = defined($_[0]) && ref($_[0]) eq 'HASH'
247             ? shift : { @_ };
248              
249 7 50       48 return undef unless $class->load($CONSTANTS);
250 7   33     82 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 16 my ($class, $dir) = @_;
265 2   50     17 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   365 my ($class, $textref) = @_;
289 13         150 bless $textref, $class;
290             }
291             sub PRINT {
292 7     7   444 my $self = shift;
293 7         103 $$self .= join('', @_);
294             }
295              
296              
297              
298             1;
299              
300             __END__