File Coverage

lib/HTML/Template/Default.pm
Criterion Covered Total %
statement 70 72 97.2
branch 29 36 80.5
condition 8 13 61.5
subroutine 9 9 100.0
pod 1 3 33.3
total 117 133 87.9


line stmt bran cond sub pod time code
1             package HTML::Template::Default;
2 2     2   36495 use strict;
  2         4  
  2         52  
3 2     2   10 use Carp;
  2         3  
  2         159  
4 2     2   10 use base 'HTML::Template';
  2         7  
  2         3294  
5 2     2   45088 use LEOCHARRE::Debug;
  2         1040  
  2         12  
6 2     2   101 use vars qw(@EXPORT_OK @ISA %EXPORT_TAGS $VERSION);
  2         4  
  2         1898  
7             @ISA = qw(Exporter);
8             @EXPORT_OK = qw(get_tmpl);
9             %EXPORT_TAGS = (
10             all => \@EXPORT_OK,
11             );
12             $VERSION = sprintf "%d.%02d", q$Revision: 1.10 $ =~ /(\d+)/g;
13              
14              
15             sub _get_abs_tmpl {
16 6     6   20 my $filename = shift;
17 6 100 50     24 $filename or debug('no filename provided') and return;
18             #$filename or die('missing filename argument to get_tmpl');
19              
20 4         7 my @possible_abs;
21              
22 4         22 for my $envar ( $ENV{HTML_TEMPLATE_ROOT}, $ENV{TMPL_PATH}, $ENV{HTML_TEMPLATE_ROOT} ){
23 12 100       34 defined $envar or next;
24 8         27 push @possible_abs, "$envar/$filename";
25             }
26              
27             # lastly try the filename
28 4         11 push @possible_abs, $filename;
29              
30              
31 4         11 for my $abs ( @possible_abs ){
32 6 100       205 if( -f $abs ){
33 3         18 debug("file found: $abs");
34 3         66 return $abs;
35             }
36             else {
37 3         15 debug("file not found: $abs");
38             }
39             }
40              
41 1         16 debug("$filename : not found on disk.\n");
42 1         22 return;
43             }
44              
45              
46              
47              
48              
49             sub get_tmpl {
50 6 100   6 1 7299 if( scalar @_ > 3 ){
51 3         12 debug('over');
52 3         55 return tmpl(@_);
53             }
54             else {
55 3         35 debug('under');
56 3         91 my %arg;
57 3         19 for (@_){
58 6 100       29 defined $_ or next;
59 5 100       23 if( ref $_ eq 'SCALAR' ){
60 3         13 $arg{scalarref} = $_;
61 3         16 next;
62             }
63 2         23 $arg{filename} = $_;
64             }
65            
66             # insert my default params
67 3         16 $arg{die_on_bad_params} = 0;
68            
69 3         24 return tmpl(%arg);
70             }
71              
72             }
73              
74             sub tmpl {
75 6     6 0 27 my %a = @_;
76 6 50       19 defined %a or confess('missing argument');
77              
78             ### %a
79              
80 6 100       49 my $debug = sprintf 'using filename: %s, using scalarref: %s',
    100          
81             ( $a{filename} ? $a{filename} : 'undef' ),
82             ( $a{scalarref} ? 1 : 0 ),
83             ;
84            
85 6 50 66     42 $a{filename} or $a{scalarref} or confess("no filename or scalarref provided");
86              
87              
88 6 100       31 if( my $abs = _get_abs_tmpl($a{filename})){
89            
90 3         15 my %_a = %a;
91             #if there is a scalarref, delete it
92 3         8 delete $_a{scalarref};
93              
94             #replace filename with what we resolved..
95 3         7 $_a{filename} = $abs;
96              
97 3 50       15 if ( my $tmpl = HTML::Template->new(%_a) ){
98 3         4015 debug("filename, $debug");
99 3         95 return $tmpl;
100             }
101             }
102              
103 3 50       57 if( $a{scalarref} ){
104            
105 3         16 my %_a = %a;
106             #if there is a filename, delete it
107 3         7 delete $_a{filename};
108              
109 3 50       250 if ( my $tmpl = HTML::Template->new(%_a) ){
110 3         2179 debug("scalarref - $debug");
111 3         97 return $tmpl;
112             }
113             }
114              
115 0         0 carp(__PACKAGE__ ."::tmpl() can't instance a template - $debug");
116 0         0 return;
117             }
118              
119              
120              
121              
122             # NEW VERSION... by overriding new in HTML::Template....
123              
124              
125              
126              
127              
128             sub new {
129 4     4 0 8557 my $class = shift;
130 4         27 my %opt = @_;
131              
132             # for this to be of any use there must be
133 4 100 66     109 $opt{filename} # at least a filename source
      66        
134             and ( $opt{filehandle} or $opt{arrayref} or $opt{scalarref} ) # and at least a default source passed as argument
135             #or return $class->SUPER::new( %opt ); # otherwise we add nothing, and revert to regular HTML::Template
136             or return HTML::Template->new( %opt ); # otherwise we add nothing, and revert to regular HTML::Template
137            
138              
139             # ok, at this point we know we have a filename source and some other source
140              
141             # we need to test the filename source, if it is valid, remove the other source(s)
142 2 100 50     51 if (
143             HTML::Template::_find_file( # in HTML::Template
144             { options => { path => ($opt{path} || []) } }, # pseudo 'self'
145             $opt{filename},
146             )
147             ){
148 1 50       168 $DEBUG and Carp::cluck('# found file, deleting other sources');
149 1         58 delete $opt{filehandle};
150 1         1 delete $opt{arrayref};
151 1         2 delete $opt{scalarref};
152             }
153              
154             else {
155 1 50       704 $DEBUG and Carp::cluck('# did not find file, deleting filename source');
156 1         123 delete $opt{filename};
157             }
158            
159             #$class->SUPER::new( %opt );
160 2         29 HTML::Template->new( %opt );
161             }
162              
163              
164              
165             1;