App-Framework
view release on metacpan or search on metacpan
lib/App/Framework/Base/Object/ErrorHandle.pm view on Meta::CPAN
# OBJECT HIERARCHY
#============================================================================================
our @ISA = qw(App::Framework::Base::Object) ;
#============================================================================================
# GLOBALS
#============================================================================================
my %FIELDS = (
'errors' => [], # List of errors for this object
'catch_fn' => undef, # Function called if error is thrown
) ;
# Keep track of all errors
my @all_errors = () ;
# Error type priority
my %ERR_TYPES = (
'fatal' => 0x80,
'nonfatal' => 0x40,
'warning' => 0x08,
'note' => 0x04,
'none' => 0x00,
) ;
# Error handler stack
my @GLOBAL_ERROR_HANDLERS = () ;
# Some useful masks
my $ERR_TYPE_MASK = 0xF0 ;
my $ERR_TYPE_WARN = 0x08 ;
my $ERR_TYPE_NOTE = 0x04 ;
#============================================================================================
# CONSTRUCTOR
#============================================================================================
=item B<new([%args])>
Create a new App::Framework::Base::Object::ErrorHandle.
The %args are specified as they would be in the B<set> method, for example:
'mmap_handler' => $mmap_handler
The full list of possible arguments are :
'fields' => Either ARRAY list of valid field names, or HASH of field names with default values
=cut
sub new
{
my ($obj, %args) = @_ ;
my $class = ref($obj) || $obj ;
# Create object
my $this = $class->SUPER::new(%args) ;
return($this) ;
}
#============================================================================================
# CLASS METHODS
#============================================================================================
#-----------------------------------------------------------------------------
=item B<init_class([%args])>
Initialises the App::Framework::Base::Object::ErrorHandle object class variables. Creates a class instance so that these
methods can also be called via the class (don't need a specific instance)
=cut
sub init_class
{
my $class = shift ;
my (%args) = @_ ;
if (! keys %args)
{
%args = () ;
}
# Add extra fields
foreach (keys %FIELDS)
{
$args{'fields'}{$_} = $FIELDS{$_} ;
}
$class->SUPER::init_class(%args) ;
# Create a class instance object - allows these methods to be called via class
$class->class_instance(%args) ;
}
#-----------------------------------------------------------------------------
=item B<add_global_error($error)>
Add a new error to the Class list keeping track of all runtime errors
=cut
sub _global_error
{
my $class = shift ;
my ($error) = @_ ;
push @all_errors, $error ;
}
#-----------------------------------------------------------------------------
=item B<global_error([%args])>
Add a new error to the Class list keeping track of all runtime errors
%args hash contains:
* type = fatal, nonfatal, warning, note
* message = text message
* errorcode = integer error code value
=cut
sub global_error
{
my $class = shift ;
my (%args) = @_ ;
# Convert args into an error
my $error = _create_error('parent'=>$class, %args) ;
$class->_global_error($error) ;
}
#-----------------------------------------------------------------------------
=item B<global_last_error()>
Returns a hash containing the information from the last error stored in the global list
Hash contains:
* type = fatal, nonfatal, warning, note
* message = text message
* errorcode = integer error code value
( run in 0.482 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )