| Document documentation | Contained in the Document distribution. |
Document::NotesFile - NotesFile file manager.
use Document::NotesFile; $obj = Document::NotesFile->new ($filespecobj); $obj = Document::NotesFile->new ($filename) $okay = $obj->note ($note,$user);
UNIVERSAL
This Class manages .note files contained within a Document directory. Notes are special historical or other information about the document added by the user of a program.
use Document::NotesFile;
my $baz = Document::NotesFile->new ($filespecobj);
my $baz = Document::NotesFile->new ($pathname);
my $waslogged = $baz->note ("Washington slept in this file", "BenF" );
None.
None.
Create an object to allow communications with a notes file object of a Document directory defined by $filename or $filespecobj. If there is currently no file in it named .note, create one and emit a log creation message about it.
Objects of this Class may be used as inputs to the Fault::Logger class.
All of the path information comes either from a preparsed filename in $filespecobj, a File::Spec::DatedPage object, or a string containing a pathname to the target Document directory.
[Can we get by with a File::Spec::Dated object?]
Write a time-stamped message into the .note file of the form:
$note\n
[$user 20021207223010]\n
and return true if we succeeded in doing so.
None.
None.
See TODO.
Fault::ErrorHandler, DMA::ISODate, File::Spec::DatedPage
Dale Amon <amon@vnl.com>
| Document documentation | Contained in the Document distribution. |
#=============================== NotesFile.pm ================================ # Filename: NotesFile.pm # Description: NotesFile file manager. # Original Author: Dale Amon # Revised by: $Author: amon $ # Date: $Date: 2008-08-28 23:26:17 $ # Version: $Revision: 1.5 $ # License: LGPL 2.1, Perl Artistic or BSD # #============================================================================= use strict; use Fault::ErrorHandler; use DMA::ISODate; use File::Spec::DatedPage; package Document::NotesFile; use vars qw{@ISA}; @ISA = qw( UNIVERSAL ); #============================================================================= # Class Methods #============================================================================= sub new { my ($class,$directory) = @_; my $self = bless {}, $class; $directory || (Fault::ErrorHandler->warn ("NotesFile->new: Missing directory path."), return undef); my $dir = $self->_setdirobj ($directory); $dir || return undef; $self->{'directory'} = $dir; # Read in our own values if the .log already exists, create it if it # doesn't and failure if we can't # my $log = $dir->pathname . "/.log"; if (!-f $log) {$self->log("Initialized .notes file for " . $dir->filename);} return $self; } #============================================================================= # Object Methods #============================================================================= sub log { my ($self,$note,$user) = @_; defined $note || ($note="<Empty note>"); defined $user || ($user="Unknown"); my $fd; my $path = $self->{'directory'}->pathname; my $utc = DMA::ISODate->utc; my $msg = sprintf "%s\n[%s %s%s]", $note, $user,$utc->date,$utc->time; # First write the new values to a tmp file. if (!open ($fd, ">>$path/.notes")) { Fault::ErrorHandler->warn ("Failed to open .notes file at ($path)!"); return 0; } if (!printf $fd "$msg\n") { Fault::ErrorHandler->warn ("Failed to write note from user $user: ($note) to ($path)!"); close $fd; return 0; } close $fd; return 1; } #============================================================================= # Internal Methods #============================================================================= # Check the type of the filename argument. If it is an object of the right # Class, use it; otherwise return undef sub _setdirobj { my ($self, $dir) = @_; my $obj = $dir; # If it is not a reference, assume it is a filename string and parse it. (ref($dir)) || ($obj = File::Spec::DatedPage->new ($dir)); ($obj->isa ('File::Spec::DatedPage')) || (return undef); return $obj; } #============================================================================= # Pod Documentation #============================================================================= # You may extract and format the documention section with the 'perldoc' cmd.
#============================================================================= # CVS HISTORY #============================================================================= # $Log: NotesFile.pm,v $ # Revision 1.5 2008-08-28 23:26:17 amon # perldoc section regularization. # # Revision 1.4 2008-08-13 21:04:32 amon # Third phase of reformatting to current standard. # # Revision 1.3 2008-08-13 20:56:53 amon # Second phase of reformatting to current standard. # # Revision 1.2 2008-08-13 14:50:02 amon # First phase of reformatting to current standard. # # Revision 1.1.1.1 2004-09-27 15:57:01 amon # Manages a Document directory # # 20040927 Dale Amon <amon@islandone.org> # Created. 1;