The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package Log::NullLogLite;

use strict;
use vars qw($VERSION @ISA);

$VERSION = 0.82;

# According to the Null pattern.
#
# Log::NullLogLite inherits from Log::LogLite and implement the Null 
# Object Pattern.
use Log::LogLite;
@ISA = ("Log::LogLite");
package Log::NullLogLite;
use strict;

##########################################
# new($filepath)
# new($filepath,$level)
# new($filepath,$level,$default_message)
##########################################
# the constructor
sub new {
    my $proto = shift; # get the class name
    my $class = ref($proto) || $proto;
    my $self  = {};
    bless ($self, $class);
    return $self;
} # of new

########################
# write($message, $level)
########################
# will log the message in the log file only if $level>=LEVEL
sub write {
    my $self = shift;
} # of write   

##########################
# level()
# level($level)
##########################
# an interface to LEVEL
sub level {
    my $self = shift;
    return -1;
} # of level

###########################
# default_message()
# default_message($message)
###########################
# an interface to DEFAULT_MESSAGE
sub default_message {
    my $self = shift;
    return "";
} # of default_message

1;
__END__

############################################################################

=head1 NAME

Log::NullLogLite - The C<Log::NullLogLite> class implements the Null Object 
pattern for the C<Log::LogLite> class.

=head1 SYNOPSIS

  use Log::NullLogLite;
               
  # create new Log::NullLogLite object
  my $log = new Log::NullLogLite();

  ...

  # we had an error (this entry will not be written to the log 
  # file because we use Log::NullLogLite object).
  $log->write("Could not open the file ".$file_name.": $!", 4);

=head1 DESCRIPTION

The C<Log::NullLogLite> class is derived from the C<Log::LogLite> class 
and implement the Null Object Pattern to let us to use the C<Log::LogLite> 
class with B<null> C<Log::LogLite> objects.
We might want to do that if we use a C<Log::LogLite> object in our code, and
we do not want always to actually define a C<Log::LogLite> object (i.e. not 
always we want to write to a log file). In such a case we will create a 
C<Log::NullLogLite> object instead of the C<Log::LogLite> object, and will 
use that object instead.
The object has all the methods that the C<Log::LogLite> object has, but 
those methods do nothing. Thus our code will continue to run without any
change, yet we will not have to define a log file path for the 
C<Log::LogLite> object, and no log will be created.

=head1 CONSTRUCTOR

=over 4

=item new ( FILEPATH [,LEVEL [,DEFAULT_MESSAGE ]] )

The constructor. The parameters will not have any affect.
Returns the new Log::NullLogLite object. 


=back

=head1 METHODS

=over 4

=item write( MESSAGE [, LEVEL ] ) 

Does nothing. The parameters will not have any affect.
Returns nothing. 

=item level( [ LEVEL ] ) 

Does nothing. The parameters will not have any affect.
Returns -1. 

=item default_message( [ MESSAGE ] ) 

Does nothing. The parameters will not have any affect.
Returns empty string (""). 

=head1 AUTHOR

Rani Pinchuk, rani@cpan.org

=head1 COPYRIGHT

Copyright (c) 2001-2002 Ockham Technology N.V. & Rani Pinchuk. 
All rights reserved.  
This package is free software; you can redistribute it and/or modify 
it under the same terms as Perl itself.

=head1 SEE ALSO

L<Log::LogLite(3)>,
The Null Object Pattern - Bobby Woolf - PLoP96 - published in Pattern 
Languages of Program Design 3 (http://cseng.aw.com/book/0,,0201310112,00.html)

=cut