/usr/local/CPAN/XML-DocStats/Object/_Initializer.pm
package Object::_Initializer;
#
# revision history
#
# 2001-09-05 AFD initial release
# 2001-09-06 AFD add _get_attribute
# 2001-10-08 AFD rename to Object::_Initializer
# 2001-10-08 AFD add log_it and dump_log
# 2001-10-09 AFD add _timestamp, debug_log
# 2001-10-12 AFD return undef from _get_attribute instead of croak for missing...
# 2001-10-12 AFD add _timeformat
# 2001-10-13 AFD remove space from end of _timestamp
# 2002-01-16 AFD avoid redefining object methods in _init...
# 2002-03-02 AFD call _defaults in new if can...
#
use strict;
use vars qw($VERSION);
use Carp;
use Data::Dumper;
$VERSION = '0.08';
sub new {
my ($class, %args) = @_;
my $self = bless {}, ref($class)||$class;
$self->_defaults if $self->can('_defaults');
$self->_init(%args);
return $self;
}
sub _init {
my ($self, %args) = @_;
my $class = ref($self);
for my $arg (keys %args) {
$self->{$arg} = $args{$arg};
next if $self->can($arg);
my $name = "$class::$arg";
no strict 'refs';
*{$name} = sub {
my $oldval = $_[0]->{$arg};
$_[0]->{$arg} = $_[1] if defined $_[1];
return $oldval;
};
}
}
sub _get_attribute {
my ($self, $attribute, $newvalue) = @_;
my $class = ref($self);
return undef unless exists $self->{$attribute};
# croak "no such attribute '$attribute' for class '$class'" unless exists $self->{$attribute};
my $oldval = $self->{$attribute};
$self->{$attribute} = $newvalue if defined $newvalue;
return $oldval;
}
sub log_it {
my ($self,$what) = @_;
if ($self->trace) {
my $logfilename = $self->LogFilename;
$what = $self->_timestamp.$what;
open(LOG, ">>$logfilename") or croak "$0 can't open LOG ($logfilename) $!";
print LOG $what;
close LOG;
}
}
sub dump_log {
my ($self) = @_;
$self->log_it( ' '.Data::Dumper->Dump([ $_[0] ], [qw( *self)])."\n");
}
sub debug_log {
my ($self) = @_;
my ($savetrace,$savelogfile) = ($self->{'trace'},$self->{'LogFilename'});
$self->_init(trace=>1,LogFilename=>'/data/'.ref($self).'.log');
$self->dump_log;
$self->trace($savetrace);
$self->LogFilename($savelogfile);
}
sub _timestamp {
my ($self) = @_;
my ($SEC, $MIN, $HOUR, $DAY, $MONTH, $YEAR, $WEEKDAY) = (localtime)[0..6];
return sprintf("%04d/%02d/%02d-%02d:%02d:%02d",$YEAR+1900,$MONTH+1,$DAY,$HOUR,$MIN,$SEC);
}
sub _timeformat {
my ($self) = @_;
my ($SEC, $MIN, $HOUR, $DAY, $MONTH, $YEAR, $WEEKDAY) = (gmtime)[0..6];
my @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
my @days = qw(Sun Mon Tue Wed Thr Fri Sat);
return sprintf("%s, %s %2d %04d at %02d:%02d:%02d UT",$days[$WEEKDAY],$months[$MONTH],$DAY,$YEAR+1900,$HOUR,$MIN,$SEC);
}
1;
__END__