File Coverage

lib/Class/Usul/Constants.pm
Criterion Covered Total %
statement 56 57 98.2
branch 12 16 75.0
condition 2 6 33.3
subroutine 27 28 96.4
pod 21 21 100.0
total 118 128 92.1


line stmt bran cond sub pod time code
1             package Class::Usul::Constants;
2              
3 28     28   113118 use strict;
  28         76  
  28         817  
4 28     28   174 use warnings;
  28         72  
  28         834  
5 28     28   8177 use parent 'Exporter::Tiny';
  28         4615  
  28         242  
6              
7 28     28   72919 use Class::Usul::Exception;
  28         109  
  28         865  
8 28     28   11380 use File::DataClass::Constants ( );
  28         161456  
  28         666  
9 28     28   206 use File::Spec::Functions qw( tmpdir );
  28         59  
  28         1357  
10 28     28   32132 use IPC::SRLock::Constants ( );
  28         6380  
  28         28031  
11              
12             my $Assert = sub {};
13             my $Config_Extn = '.json';
14             my $Exception_Class = 'Class::Usul::Exception';
15             my $Log_Levels = [ qw( alert debug error fatal info warn ) ];
16              
17             __PACKAGE__->Exception_Class( $Exception_Class ); # Trigger redispatch
18              
19             our @EXPORT = qw( ARRAY AS_PARA AS_PASSWORD ASSERT BRK CODE COMMA CONFIG_EXTN
20             DEFAULT_CONFHOME DEFAULT_ENVDIR DEFAULT_ENCODING
21             DEFAULT_L10N_DOMAIN DIGEST_ALGORITHMS ENCODINGS
22             EXCEPTION_CLASS FAILED FALSE HASH LANG LBRACE
23             LOCALIZE LOG_LEVELS NO NUL OK PERL_EXTNS PHASE
24             PREFIX QUIT QUOTED_RE SEP SPC TRUE UMASK UNDEFINED_RV
25             UNTAINT_CMDLINE UNTAINT_IDENTIFIER UNTAINT_PATH
26             UUID_PATH WIDTH YES );
27              
28             sub ARRAY () { 'ARRAY' }
29             sub BRK () { ': ' }
30             sub CODE () { 'CODE' }
31             sub COMMA () { ',' }
32             sub FAILED () { 1 }
33             sub FALSE () { 0 }
34             sub HASH () { 'HASH' }
35             sub LANG () { 'en' }
36             sub LBRACE () { '{' }
37             sub LOCALIZE () { '[_' }
38             sub NO () { 'n' }
39             sub NUL () { q() }
40             sub OK () { 0 }
41             sub PHASE () { 2 }
42             sub QUIT () { 'q' }
43             sub SEP () { '/' }
44             sub SPC () { ' ' }
45             sub TRUE () { 1 }
46             sub UMASK () { '027' }
47             sub WIDTH () { 80 }
48             sub YES () { 'y' }
49              
50 1     1 1 126 sub AS_PARA () { { cl => 1, fill => 1, nl => 1 } }
51 1     1 1 5 sub AS_PASSWORD () { ( q(), 1, 0, 0, 1 ) }
52 4     4 1 21 sub ASSERT () { __PACKAGE__->Assert }
53 22     22 1 248 sub CONFIG_EXTN () { __PACKAGE__->Config_Extn }
54 42     42 1 306 sub DEFAULT_CONFHOME () { tmpdir }
55             sub DEFAULT_ENCODING () { 'UTF-8' }
56 22     22 1 126 sub DEFAULT_ENVDIR () { [ q(), qw( etc default ) ] }
57             sub DEFAULT_L10N_DOMAIN () { 'default' }
58 3     3 1 17 sub DIGEST_ALGORITHMS () { ( qw( SHA-512 SHA-256 SHA-1 MD5 ) ) }
59 1     1 1 493 sub ENCODINGS () { ( qw( ascii iso-8859-1 UTF-8 guess ) ) }
60 318     318 1 226245 sub EXCEPTION_CLASS () { __PACKAGE__->Exception_Class }
61 437     437 1 1058 sub LOG_LEVELS () { @{ __PACKAGE__->Log_Levels } }
  437         3293  
62 10     10 1 760 sub PERL_EXTNS () { ( qw( .pl .pm .t ) ) }
63 22     22 1 174 sub PREFIX () { [ q(), 'opt' ] }
64 3     3 1 39 sub QUOTED_RE () { qr{ (?:(?:\")(?:[^\\\"]*(?:\\.[^\\\"]*)*)(?:\")|(?:\')(?:[^\\\']*(?:\\.[^\\\']*)*)(?:\')|(?:\`)(?:[^\\\`]*(?:\\.[^\\\`]*)*)(?:\`)) }mx }
65             sub UNDEFINED_RV () { -1 }
66 59     59 1 307 sub UNTAINT_CMDLINE () { qr{ \A ([^\$&;<>\`|]+) \z }mx }
67 16     16 1 81 sub UNTAINT_IDENTIFIER () { qr{ \A ([a-zA-Z0-9_]+) \z }mx }
68 1410     1410 1 5090 sub UNTAINT_PATH () { qr{ \A ([^\$%&\*;<>\`|]+) \z }mx }
69 0     0 1 0 sub UUID_PATH () { [ q(), qw( proc sys kernel random uuid ) ] }
70              
71             sub Assert {
72 5 100   5 1 774 my ($self, $subr) = @_; defined $subr or return $Assert;
  5         31  
73              
74 1 50       4 ref $subr eq 'CODE' or EXCEPTION_CLASS->throw
75             ( "Assert subroutine ${subr} is not a code reference" );
76              
77 1         20 return $Assert = $subr;
78             }
79              
80             sub Config_Extn {
81 23 100   23 1 561 my ($self, $extn) = @_; defined $extn or return $Config_Extn;
  23         157  
82              
83 1 50 33     10 (length $extn < 255 and $extn !~ m{ \n }mx) or EXCEPTION_CLASS->throw
84             ( "Config extension ${extn} is not a simple string" );
85              
86 1         3 return $Config_Extn = $extn;
87             }
88              
89             sub Exception_Class {
90 346 100   346 1 1273 my ($self, $class) = @_; defined $class or return $Exception_Class;
  346         5554  
91              
92 28 50       368 $class->can( 'throw' ) or $Exception_Class->throw
93             ( "Exception class ${class} is not loaded or has no throw method" );
94              
95 28         157 File::DataClass::Constants->Exception_Class( $class );
96 28         368 IPC::SRLock::Constants->Exception_Class( $class );
97              
98 28         248 return $Exception_Class = $class;
99             }
100              
101             sub Log_Levels {
102 438 100   438 1 1548 my ($self, $levels) = @_; defined $levels or return $Log_Levels;
  438         9544  
103              
104 1 50 33     9 ref $levels eq 'ARRAY' and defined $levels->[ 0 ] or EXCEPTION_CLASS->throw
105             ( "Log levels must be an array reference with one defined value" );
106              
107 1         3 return $Log_Levels = $levels;
108             }
109              
110             1;
111              
112             __END__
113              
114             =pod
115              
116             =head1 Name
117              
118             Class::Usul::Constants - Definitions of constant values
119              
120             =head1 Synopsis
121              
122             use Class::Usul::Constants qw( FALSE SEP TRUE );
123              
124             my $bool = TRUE; my $slash = SEP;
125              
126             =head1 Description
127              
128             Exports a list of subroutines each of which returns a constants value
129              
130             =head1 Configuration and Environment
131              
132             Defines the following class attributes;
133              
134             =over 3
135              
136             =item C<Assert>
137              
138             =item C<Config_Extn>
139              
140             =item C<Config_Key>
141              
142             =item C<Exception_Class>
143              
144             =item C<Log_Levels>
145              
146             =back
147              
148             These are accessor / mutators for class attributes of the same name. The
149             constants with uppercase names return these values. At compile time they
150             can be used to set values the are then constant at runtime
151              
152             =head1 Subroutines/Methods
153              
154             =head2 ARRAY
155              
156             String C<ARRAY>
157              
158             =head2 AS_PARA
159              
160             Returns a hash reference containing the keys and values that causes the auto
161             formatting L<output|Class::Usul::Programs/output> subroutine to clear left,
162             fill paragraphs, and append an extra newline
163              
164             =head2 AS_PASSWORD
165              
166             Returns a list of arguments for
167             L<get_line|Class::Usul::TraitFor::Prompting/get_line> which causes it to prompt
168             for a password
169              
170             =head2 ASSERT
171              
172             Return a code reference which is imported by L<Class::Usul::Functions> into
173             the callers namespace as the C<assert> function. By default this will
174             be the empty subroutine, C<sub {}>. Change this by setting the C<Assert>
175             class attribute
176              
177             =head2 BRK
178              
179             Separate leader from message with the characters colon space
180              
181             =head2 CODE
182              
183             String C<CODE>
184              
185             =head2 COMMA
186              
187             The comma character
188              
189             =head2 CONFIG_EXTN
190              
191             The default configuration file extension, F<.json>. Change this by
192             setting the C<Config_Extn> class attribute
193              
194             =head2 DEFAULT_CONFHOME
195              
196             Default directory for the config file. The function C<find_apphome>
197             defaults to returning this value if it cannot find a more suitable one.
198             Returns the L<temporary directory|File::Spec::Functions/tmpdir>
199              
200             =head2 DEFAULT_ENCODING
201              
202             String C<UTF-8>
203              
204             =head2 DEFAULT_ENVDIR
205              
206             An array reference which if passed to L<catdir|File::Spec/catdir> is the
207             directory which will contain the applications installation information.
208             Directory defaults to F</etc/default>
209              
210             =head2 DEFAULT_L10N_DOMAIN
211              
212             String C<default>. The name of the default message catalogue
213              
214             =head2 DIGEST_ALGORITHMS
215              
216             List of algorithms to try as args to L<Digest>
217              
218             =head2 ENCODINGS
219              
220             List of supported IO encodings
221              
222             =head2 EXCEPTION_CLASS
223              
224             The name of the class used to throw exceptions. Defaults to
225             L<Class::Usul::Exception> but can be changed by setting the
226             C<Exception_Class> class attribute
227              
228             =head2 FAILED
229              
230             Non zero exit code indicating program failure
231              
232             =head2 FALSE
233              
234             Digit C<0>
235              
236             =head2 HASH
237              
238             String C<HASH>
239              
240             =head2 LANG
241              
242             Default language code, C<en>
243              
244             =head2 LBRACE
245              
246             The left brace character, C<{>
247              
248             =head2 LOCALIZE
249              
250             The character sequence that introduces a localisation substitution
251             parameter, C<[_>
252              
253             =head2 LOG_LEVELS
254              
255             List of methods the log object is expected to support
256              
257             =head2 NO
258              
259             The letter C<n>
260              
261             =head2 NUL
262              
263             Empty (zero length) string
264              
265             =head2 OK
266              
267             Returns good program exit code, zero
268              
269             =head2 PERL_EXTNS
270              
271             List of possible file suffixes used on Perl scripts
272              
273             =head2 PHASE
274              
275             The default phase number used to select installation specific config, 2
276              
277             =head2 PREFIX
278              
279             Array reference representing the default parent path for a normal install.
280             Defaults to F</opt>
281              
282             =head2 QUIT
283              
284             The character q
285              
286             =head2 QUOTED_RE
287              
288             The regular expression to match a quoted string. Lifted from L<Regexp::Common>
289             which now has installation and indexing issues
290              
291             =head2 SEP
292              
293             Slash C</> character
294              
295             =head2 SPC
296              
297             Space character
298              
299             =head2 TRUE
300              
301             Digit C<1>
302              
303             =head2 UMASK
304              
305             Default file creation mask, 027 octal, that's C<rw-r----->
306              
307             =head2 UNDEFINED_RV
308              
309             Digit C<-1>. Indicates that a method wrapped in a try/catch block failed
310             to return a defined value
311              
312             =head2 UNTAINT_CMDLINE
313              
314             Regular expression used to untaint command line strings
315              
316             =head2 UNTAINT_IDENTIFIER
317              
318             Regular expression used to untaint identifier strings
319              
320             =head2 UNTAINT_PATH
321              
322             Regular expression used to untaint path strings
323              
324             =head2 USUL_CONFIG_KEY
325              
326             Default configuration hash key, C<Plugin::Usul>. Change this by setting
327             the C<Config_Key> class attribute
328              
329             =head2 UUID_PATH
330              
331             An array reference which if passed to L<catdir|File::Spec/catdir> is the path
332             which will return a unique identifier if opened and read
333              
334             =head2 WIDTH
335              
336             Default terminal screen width in characters
337              
338             =head2 YES
339              
340             The character y
341              
342             =head1 Diagnostics
343              
344             None
345              
346             =head1 Dependencies
347              
348             =over 3
349              
350             =item L<Exporter>
351              
352             =item L<Class::Usul::Exception>
353              
354             =back
355              
356             =head1 Incompatibilities
357              
358             There are no known incompatibilities in this module
359              
360             =head1 Bugs and Limitations
361              
362             There are no known bugs in this module.
363             Please report problems to the address below.
364             Patches are welcome
365              
366             =head1 Author
367              
368             Peter Flanigan, C<< <pjfl@cpan.org> >>
369              
370             =head1 License and Copyright
371              
372             Copyright (c) 2017 Peter Flanigan. All rights reserved
373              
374             This program is free software; you can redistribute it and/or modify it
375             under the same terms as Perl itself. See L<perlartistic>
376              
377             This program is distributed in the hope that it will be useful,
378             but WITHOUT WARRANTY; without even the implied warranty of
379             MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
380              
381             =cut
382              
383             # Local Variables:
384             # mode: perl
385             # tab-width: 3
386             # End: