App-CELL
view release on metacpan or search on metacpan
lib/App/CELL/Status.pm view on Meta::CPAN
=over
=item C<level> - the status level (see L</new>, below)
=item C<message> - message explaining the status
=item C<caller> - an array reference containing the three-item list
generated by the C<caller> function
=back
The typical use cases for this object are:
=over
=item As a return value from a function call
=item To trigger a higher-severity log message
=back
All calls to C<< App::CELL::Status->new >> with a status other than OK
trigger a log message.
=head1 PUBLIC METHODS
This module provides the following public methods:
=head2 new
Construct a status object and trigger a log message if the level is anything
other than "OK". Always returns a status object. If no level is specified, the
level will be 'ERR'. If no code is given, the code will be undefined (I think).
=cut
sub new {
my ( $class, @ARGS ) = @_;
my %ARGS = @ARGS;
my $self;
# default to ERR level
unless ( defined $ARGS{level} and grep { $ARGS{level} eq $_ } $log->permitted_levels ) {
$ARGS{level} = 'ERR';
}
# if caller array not given, create it
if ( not $ARGS{caller} ) {
$ARGS{caller} = [ CORE::caller() ];
}
$ARGS{args} = [] if not defined( $ARGS{args} );
$ARGS{called_from_status} = 1;
if ( $ARGS{code} ) {
# App::CELL::Message->new returns a status object
my $status = $class->SUPER::new( %ARGS );
if ( $status->ok ) {
my $parent = $status->payload;
$ARGS{msgobj} = $parent;
$ARGS{code} = $parent->code;
$ARGS{text} = $parent->text;
} else {
$ARGS{code} = $status->code;
if ( $ARGS{args} ) {
$ARGS{text} = $status->text . stringify_args( $ARGS{args} );
} else {
$ARGS{text} = $status->text;
}
}
}
# bless into objecthood
$self = bless \%ARGS, 'App::CELL::Status';
# Log the message
$log->status_obj( $self, cell => ( $ARGS{cell} || 0 ) ) if ( $ARGS{level} ne 'OK' and $ARGS{level} ne 'NOT_OK' );
# return the created object
return $self;
}
=head2 dump
Dump an existing status object. Takes: PARAMHASH. Parameter 'to' determines
destination, which can be 'string' (default), 'log' or 'fd'.
# dump object to string
my $dump_str = $status->dump();
$dump_str = $status->dump( to => 'string' );
# dump object to log
$status->dump( to => 'log' );
# dump object to file descriptor
$status->dump( fd => STDOUT );
$status->dump( to => 'fd', fd => \*STDOUT );
Always returns a true value.
=cut
sub dump {
my $self = shift;
my ( %ARGS ) = validate( @_, { 'to' => 0, 'fd' => 0 } );
my ( $action, $fh );
if ( not %ARGS ) {
$action = 'string';
} elsif ( exists $ARGS{'to'} ) {
if ( $ARGS{'to'} eq 'string' ) {
$action = 'string';
} elsif ( $ARGS{'to'} eq 'log' ) {
$action = 'log';
} elsif ( $ARGS{'to'} eq 'fd' and exists $ARGS{'fd'} ) {
$action = 'fd';
$fh = $ARGS{'fd'};
( run in 0.868 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )