File Coverage

lib/Template/Constants.pm
Criterion Covered Total %
statement 137 137 100.0
branch 12 16 75.0
condition 1 3 33.3
subroutine 39 39 100.0
pod 0 1 0.0
total 189 196 96.4


line stmt bran cond sub pod time code
1             #============================================================= -*-Perl-*-
2             #
3             # Template::Constants.pm
4             #
5             # DESCRIPTION
6             # Definition of constants for the Template Toolkit.
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::Constants;
20              
21             require Exporter;
22 92     92   10951 use strict;
  92         363  
  92         2165  
23 92     92   252 use warnings;
  92         97  
  92         1907  
24 92     92   259 use Exporter;
  92         112  
  92         3216  
25             # Perl::MinimumVersion seems to think this is a Perl 5.008ism...
26             # use base qw( Exporter );
27 92     92   289 use vars qw( @EXPORT_OK %EXPORT_TAGS );
  92         98  
  92         4820  
28 92     92   286 use vars qw( $DEBUG_OPTIONS @STATUS @ERROR @CHOMP @DEBUG @ISA );
  92         89  
  92         7003  
29             # ... so we'll do it the Old Skool way just to keep it quiet
30             @ISA = qw( Exporter );
31              
32             our $VERSION = 2.75;
33              
34              
35             #========================================================================
36             # ----- EXPORTER -----
37             #========================================================================
38              
39             # STATUS constants returned by directives
40 92     92   314 use constant STATUS_OK => 0; # ok
  92         89  
  92         6476  
41 92     92   306 use constant STATUS_RETURN => 1; # ok, block ended by RETURN
  92         97  
  92         3291  
42 92     92   278 use constant STATUS_STOP => 2; # ok, stopped by STOP
  92         84  
  92         3239  
43 92     92   290 use constant STATUS_DONE => 3; # ok, iterator done
  92         98  
  92         3220  
44 92     92   336 use constant STATUS_DECLINED => 4; # ok, declined to service request
  92         99  
  92         3101  
45 92     92   275 use constant STATUS_ERROR => 255; # error condition
  92         93  
  92         3390  
46              
47             # ERROR constants for indicating exception types
48 92     92   283 use constant ERROR_RETURN => 'return'; # return a status code
  92         89  
  92         3172  
49 92     92   276 use constant ERROR_FILE => 'file'; # file error: I/O, parse, recursion
  92         96  
  92         3013  
50 92     92   270 use constant ERROR_VIEW => 'view'; # view error
  92         96  
  92         2997  
51 92     92   262 use constant ERROR_UNDEF => 'undef'; # undefined variable value used
  92         132  
  92         3099  
52 92     92   277 use constant ERROR_PERL => 'perl'; # error in [% PERL %] block
  92         85  
  92         3556  
53 92     92   261 use constant ERROR_FILTER => 'filter'; # filter error
  92         136  
  92         3152  
54 92     92   319 use constant ERROR_PLUGIN => 'plugin'; # plugin error
  92         94  
  92         3002  
55              
56             # CHOMP constants for PRE_CHOMP and POST_CHOMP
57 92     92   269 use constant CHOMP_NONE => 0; # do not remove whitespace
  92         98  
  92         2912  
58 92     92   264 use constant CHOMP_ALL => 1; # remove whitespace up to newline
  92         95  
  92         2918  
59 92     92   302 use constant CHOMP_ONE => 1; # new name for CHOMP_ALL
  92         84  
  92         3005  
60 92     92   289 use constant CHOMP_COLLAPSE => 2; # collapse whitespace to a single space
  92         104  
  92         3703  
61 92     92   296 use constant CHOMP_GREEDY => 3; # remove all whitespace including newlines
  92         74  
  92         3040  
62              
63             # DEBUG constants to enable various debugging options
64 92     92   284 use constant DEBUG_OFF => 0; # do nothing
  92         152  
  92         3054  
65 92     92   449 use constant DEBUG_ON => 1; # basic debugging flag
  92         116  
  92         3016  
66 92     92   300 use constant DEBUG_UNDEF => 2; # throw undef on undefined variables
  92         90  
  92         2971  
67 92     92   272 use constant DEBUG_VARS => 4; # general variable debugging
  92         88  
  92         3146  
68 92     92   291 use constant DEBUG_DIRS => 8; # directive debugging
  92         95  
  92         2862  
69 92     92   273 use constant DEBUG_STASH => 16; # general stash debugging
  92         76  
  92         3023  
70 92     92   284 use constant DEBUG_CONTEXT => 32; # context debugging
  92         86  
  92         2997  
71 92     92   273 use constant DEBUG_PARSER => 64; # parser debugging
  92         159  
  92         2917  
72 92     92   324 use constant DEBUG_PROVIDER => 128; # provider debugging
  92         89  
  92         3919  
73 92     92   297 use constant DEBUG_PLUGINS => 256; # plugins debugging
  92         77  
  92         2998  
74 92     92   284 use constant DEBUG_FILTERS => 512; # filters debugging
  92         95  
  92         2960  
75 92     92   272 use constant DEBUG_SERVICE => 1024; # context debugging
  92         81  
  92         3079  
76 92     92   269 use constant DEBUG_ALL => 2047; # everything
  92         104  
  92         2961  
77              
78             # extra debugging flags
79 92     92   273 use constant DEBUG_CALLER => 4096; # add caller file/line
  92         83  
  92         2902  
80 92     92   273 use constant DEBUG_FLAGS => 4096; # bitmask to extract flags
  92         99  
  92         43927  
81              
82             $DEBUG_OPTIONS = {
83             &DEBUG_OFF => off => off => &DEBUG_OFF,
84             &DEBUG_ON => on => on => &DEBUG_ON,
85             &DEBUG_UNDEF => undef => undef => &DEBUG_UNDEF,
86             &DEBUG_VARS => vars => vars => &DEBUG_VARS,
87             &DEBUG_DIRS => dirs => dirs => &DEBUG_DIRS,
88             &DEBUG_STASH => stash => stash => &DEBUG_STASH,
89             &DEBUG_CONTEXT => context => context => &DEBUG_CONTEXT,
90             &DEBUG_PARSER => parser => parser => &DEBUG_PARSER,
91             &DEBUG_PROVIDER => provider => provider => &DEBUG_PROVIDER,
92             &DEBUG_PLUGINS => plugins => plugins => &DEBUG_PLUGINS,
93             &DEBUG_FILTERS => filters => filters => &DEBUG_FILTERS,
94             &DEBUG_SERVICE => service => service => &DEBUG_SERVICE,
95             &DEBUG_ALL => all => all => &DEBUG_ALL,
96             &DEBUG_CALLER => caller => caller => &DEBUG_CALLER,
97             };
98              
99             @STATUS = qw( STATUS_OK STATUS_RETURN STATUS_STOP STATUS_DONE
100             STATUS_DECLINED STATUS_ERROR );
101             @ERROR = qw( ERROR_FILE ERROR_VIEW ERROR_UNDEF ERROR_PERL
102             ERROR_RETURN ERROR_FILTER ERROR_PLUGIN );
103             @CHOMP = qw( CHOMP_NONE CHOMP_ALL CHOMP_ONE CHOMP_COLLAPSE CHOMP_GREEDY );
104             @DEBUG = qw( DEBUG_OFF DEBUG_ON DEBUG_UNDEF DEBUG_VARS
105             DEBUG_DIRS DEBUG_STASH DEBUG_CONTEXT DEBUG_PARSER
106             DEBUG_PROVIDER DEBUG_PLUGINS DEBUG_FILTERS DEBUG_SERVICE
107             DEBUG_ALL DEBUG_CALLER DEBUG_FLAGS );
108              
109             @EXPORT_OK = ( @STATUS, @ERROR, @CHOMP, @DEBUG );
110             %EXPORT_TAGS = (
111             'all' => [ @EXPORT_OK ],
112             'status' => [ @STATUS ],
113             'error' => [ @ERROR ],
114             'chomp' => [ @CHOMP ],
115             'debug' => [ @DEBUG ],
116             );
117              
118              
119             sub debug_flags {
120 4     4 0 10 my ($self, $debug) = @_;
121 4         4 my (@flags, $flag, $value);
122 4 50 33     9 $debug = $self unless defined($debug) || ref($self);
123            
124 4 100       10 if ($debug =~ /^\d+$/) {
125 1         2 foreach $flag (@DEBUG) {
126 15 100       27 next if $flag =~ /^DEBUG_(OFF|ALL|FLAGS)$/;
127              
128             # don't trash the original
129 12         9 my $copy = $flag;
130 12         19 $flag =~ s/^DEBUG_//;
131 12         12 $flag = lc $flag;
132             return $self->error("no value for flag: $flag")
133 12 50       19 unless defined($value = $DEBUG_OPTIONS->{ $flag });
134 12         7 $flag = $value;
135              
136 12 100       17 if ($debug & $flag) {
137 2         3 $value = $DEBUG_OPTIONS->{ $flag };
138 2 50       4 return $self->error("no value for flag: $flag") unless defined $value;
139 2         3 push(@flags, $value);
140             }
141             }
142 1 50       5 return wantarray ? @flags : join(', ', @flags);
143             }
144             else {
145 3         15 @flags = split(/\W+/, $debug);
146 3         4 $debug = 0;
147 3         4 foreach $flag (@flags) {
148 5         9 $value = $DEBUG_OPTIONS->{ $flag };
149 5 100       12 return $self->error("unknown debug flag: $flag") unless defined $value;
150 4         5 $debug |= $value;
151             }
152 2         8 return $debug;
153             }
154             }
155              
156              
157             1;
158              
159             __END__