—package
Class::Usul::Constants;
use
5.010001;
use
strict;
use
warnings;
use
File::DataClass::Constants ( );
use
IPC::SRLock::Constants ( );
my
$Assert
=
sub
{};
my
$Config_Extn
=
'.json'
;
my
$Exception_Class
=
'Class::Usul::Exception'
;
my
$Log_Levels
= [
qw( alert debug error fatal info warn )
];
__PACKAGE__->Exception_Class(
$Exception_Class
);
# Trigger redispatch
our
@EXPORT
=
qw( ARRAY AS_PARA AS_PASSWORD ASSERT BRK CODE COMMA CONFIG_EXTN
DEFAULT_CONFHOME DEFAULT_ENVDIR DEFAULT_ENCODING
DEFAULT_L10N_DOMAIN DIGEST_ALGORITHMS ENCODINGS
EXCEPTION_CLASS FAILED FALSE HASH LANG LBRACE
LOCALIZE LOG_LEVELS NO NUL OK PERL_EXTNS PHASE
PREFIX QUIT SEP SPC TRUE UMASK UNDEFINED_RV
UNTAINT_CMDLINE UNTAINT_IDENTIFIER UNTAINT_PATH
UUID_PATH WIDTH YES )
;
sub
ARRAY () {
'ARRAY'
}
sub
BRK () {
': '
}
sub
CODE () {
'CODE'
}
sub
COMMA () {
','
}
sub
FAILED () { 1 }
sub
FALSE () { 0 }
sub
HASH () {
'HASH'
}
sub
LANG () {
'en'
}
sub
LBRACE () {
'{'
}
sub
LOCALIZE () {
'[_'
}
sub
NO () {
'n'
}
sub
NUL () {
q()
}
sub
OK () { 0 }
sub
PHASE () { 2 }
sub
QUIT () {
'q'
}
sub
SEP () {
'/'
}
sub
SPC () {
' '
}
sub
TRUE () { 1 }
sub
UMASK () {
'027'
}
sub
WIDTH () { 80 }
sub
YES () {
'y'
}
sub
AS_PARA () { {
cl
=> 1,
fill
=> 1,
nl
=> 1 } }
sub
AS_PASSWORD () { (
q()
, 1, 0, 0, 1 ) }
sub
ASSERT () { __PACKAGE__->Assert }
sub
CONFIG_EXTN () { __PACKAGE__->Config_Extn }
sub
DEFAULT_CONFHOME () { tmpdir }
sub
DEFAULT_ENCODING () {
'UTF-8'
}
sub
DEFAULT_ENVDIR () { [
q()
,
qw( etc default )
] }
sub
DEFAULT_L10N_DOMAIN () {
'default'
}
sub
DIGEST_ALGORITHMS () { (
qw( SHA-512 SHA-256 SHA-1 MD5 )
) }
sub
ENCODINGS () { (
qw( ascii iso-8859-1 UTF-8 guess )
) }
sub
EXCEPTION_CLASS () { __PACKAGE__->Exception_Class }
sub
LOG_LEVELS () { @{ __PACKAGE__->Log_Levels } }
sub
PERL_EXTNS () { (
qw( .pl .pm .t )
) }
sub
PREFIX () { [
q()
,
'opt'
] }
sub
UNDEFINED_RV () { -1 }
sub
UNTAINT_CMDLINE () {
qr{ \A ([^\$&;<>\`|]+) \z }
mx }
sub
UNTAINT_IDENTIFIER () {
qr{ \A ([a-zA-Z0-9_]+) \z }
mx }
sub
UNTAINT_PATH () {
qr{ \A ([^\$%&\*;<>\`|]+) \z }
mx }
sub
UUID_PATH () { [
q()
,
qw( proc sys kernel random uuid )
] }
sub
Assert {
my
(
$self
,
$subr
) =
@_
;
defined
$subr
or
return
$Assert
;
ref
$subr
eq
'CODE'
or EXCEPTION_CLASS->throw
(
"Assert subroutine ${subr} is not a code reference"
);
return
$Assert
=
$subr
;
}
sub
Config_Extn {
my
(
$self
,
$extn
) =
@_
;
defined
$extn
or
return
$Config_Extn
;
(
length
$extn
< 255 and
$extn
!~ m{ \n }mx) or EXCEPTION_CLASS->throw
(
"Config extension ${extn} is not a simple string"
);
return
$Config_Extn
=
$extn
;
}
sub
Exception_Class {
my
(
$self
,
$class
) =
@_
;
defined
$class
or
return
$Exception_Class
;
$class
->can(
'throw'
) or
$Exception_Class
->throw
(
"Exception class ${class} is not loaded or has no throw method"
);
File::DataClass::Constants->Exception_Class(
$class
);
IPC::SRLock::Constants->Exception_Class(
$class
);
return
$Exception_Class
=
$class
;
}
sub
Log_Levels {
my
(
$self
,
$levels
) =
@_
;
defined
$levels
or
return
$Log_Levels
;
ref
$levels
eq
'ARRAY'
and
defined
$levels
->[ 0 ] or EXCEPTION_CLASS->throw
(
"Log levels must be an array reference with one defined value"
);
return
$Log_Levels
=
$levels
;
}
1;
__END__
=pod
=head1 Name
Class::Usul::Constants - Definitions of constant values
=head1 Synopsis
use Class::Usul::Constants qw( FALSE SEP TRUE );
my $bool = TRUE; my $slash = SEP;
=head1 Description
Exports a list of subroutines each of which returns a constants value
=head1 Configuration and Environment
Defines the following class attributes;
=over 3
=item C<Assert>
=item C<Config_Extn>
=item C<Config_Key>
=item C<Exception_Class>
=item C<Log_Levels>
=back
These are accessor / mutators for class attributes of the same name. The
constants with uppercase names return these values. At compile time they
can be used to set values the are then constant at runtime
=head1 Subroutines/Methods
=head2 ARRAY
String C<ARRAY>
=head2 AS_PARA
Returns a hash reference containing the keys and values that causes the auto
formatting L<output|Class::Usul::Programs/output> subroutine to clear left,
fill paragraphs, and append an extra newline
=head2 AS_PASSWORD
Returns a list of arguments for
L<get_line|Class::Usul::TraitFor::Prompting/get_line> which causes it to prompt
for a password
=head2 ASSERT
Return a code reference which is imported by L<Class::Usul::Functions> into
the callers namespace as the C<assert> function. By default this will
be the empty subroutine, C<sub {}>. Change this by setting the C<Assert>
class attribute
=head2 BRK
Separate leader from message with the characters colon space
=head2 CODE
String C<CODE>
=head2 COMMA
The comma character
=head2 CONFIG_EXTN
The default configuration file extension, F<.json>. Change this by
setting the C<Config_Extn> class attribute
=head2 DEFAULT_CONFHOME
Default directory for the config file. The function C<find_apphome>
defaults to returning this value if it cannot find a more suitable one.
Returns the L<temporary directory|File::Spec::Functions/tmpdir>
=head2 DEFAULT_ENCODING
String C<UTF-8>
=head2 DEFAULT_ENVDIR
An array reference which if passed to L<catdir|File::Spec/catdir> is the
directory which will contain the applications installation information.
Directory defaults to F</etc/default>
=head2 DEFAULT_L10N_DOMAIN
String C<default>. The name of the default message catalogue
=head2 DIGEST_ALGORITHMS
List of algorithms to try as args to L<Digest>
=head2 ENCODINGS
List of supported IO encodings
=head2 EXCEPTION_CLASS
The name of the class used to throw exceptions. Defaults to
L<Class::Usul::Exception> but can be changed by setting the
C<Exception_Class> class attribute
=head2 FAILED
Non zero exit code indicating program failure
=head2 FALSE
Digit C<0>
=head2 HASH
String C<HASH>
=head2 LANG
Default language code, C<en>
=head2 LBRACE
The left brace character, C<{>
=head2 LOCALIZE
The character sequence that introduces a localisation substitution
parameter, C<[_>
=head2 LOG_LEVELS
List of methods the log object is expected to support
=head2 NO
The letter C<n>
=head2 NUL
Empty (zero length) string
=head2 OK
Returns good program exit code, zero
=head2 PERL_EXTNS
List of possible file suffixes used on Perl scripts
=head2 PHASE
The default phase number used to select installation specific config, 2
=head2 PREFIX
Array reference representing the default parent path for a normal install.
Defaults to F</opt>
=head2 QUIT
The character q
=head2 SEP
Slash C</> character
=head2 SPC
Space character
=head2 TRUE
Digit C<1>
=head2 UMASK
Default file creation mask, 027 octal, that's C<rw-r----->
=head2 UNDEFINED_RV
Digit C<-1>. Indicates that a method wrapped in a try/catch block failed
to return a defined value
=head2 UNTAINT_CMDLINE
Regular expression used to untaint command line strings
=head2 UNTAINT_IDENTIFIER
Regular expression used to untaint identifier strings
=head2 UNTAINT_PATH
Regular expression used to untaint path strings
=head2 USUL_CONFIG_KEY
Default configuration hash key, C<Plugin::Usul>. Change this by setting
the C<Config_Key> class attribute
=head2 UUID_PATH
An array reference which if passed to L<catdir|File::Spec/catdir> is the path
which will return a unique identifier if opened and read
=head2 WIDTH
Default terminal screen width in characters
=head2 YES
The character y
=head1 Diagnostics
None
=head1 Dependencies
=over 3
=item L<Exporter>
=item L<Class::Usul::Exception>
=back
=head1 Incompatibilities
There are no known incompatibilities in this module
=head1 Bugs and Limitations
There are no known bugs in this module.
Please report problems to the address below.
Patches are welcome
=head1 Author
Peter Flanigan, C<< <pjfl@cpan.org> >>
=head1 License and Copyright
Copyright (c) 2015 Peter Flanigan. All rights reserved
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself. See L<perlartistic>
This program is distributed in the hope that it will be useful,
but WITHOUT WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
=cut
# Local Variables:
# mode: perl
# tab-width: 3
# End: