haver-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Haver-commits] r49 - haver-core/lib/Haver


From: dylan
Subject: [Haver-commits] r49 - haver-core/lib/Haver
Date: Tue, 20 Apr 2004 22:30:19 -0400 (EDT)

Author: dylan
Date: 2004-04-20 22:30:18 -0400 (Tue, 20 Apr 2004)
New Revision: 49

Modified:
   haver-core/lib/Haver/Config.pm
   haver-core/lib/Haver/Savable.pm
Log:
Wrote documentation for Haver::Savable
and renamed some methods.


Modified: haver-core/lib/Haver/Config.pm
===================================================================
--- haver-core/lib/Haver/Config.pm      2004-04-21 01:51:27 UTC (rev 48)
+++ haver-core/lib/Haver/Config.pm      2004-04-21 02:30:18 UTC (rev 49)
@@ -38,17 +38,19 @@
        }
 
        if (exists $me->{auto_save}) {
+               print "has auto_save\n";
                $me->auto_save(delete $me->{auto_save});
        } else {
+               print "does not have auto_save\n";
                $me->auto_save(1);
        }
        
-       if (defined $me->filename) {
+       if ($me->filename) {
                $me->load;
        }
 }
 
-sub _load {
+sub _load_data {
        my ($me, $data) = @_;
        ASSERT: ref($data) eq 'HASH' or UNIVERSAL::isa($data, 'HASH');
 
@@ -57,7 +59,7 @@
        }
 }
 
-sub _save {
+sub _save_data {
        my ($me) = @_;
        my %data = ();
 
@@ -69,19 +71,20 @@
        return \%data;
 }
 
-sub load {
-       my ($me, $fn) = @_;
-       $me->filename($fn) if defined $fn;
-       $me->SUPER::load;
-}
 
+#sub load {
+#      my ($me, $fn) = @_;
+#      $me->filename($fn) if defined $fn;
+#      $me->SUPER::load;
+#}
 
+
 sub filename {
        my ($me, $file) = @_;
 
-       if (@_ == 2) {
+       if (@_ == 1) {
                return $me->{_filename};
-       } elsif (@_ == 3) {
+       } elsif (@_ == 2) {
                return $me->{_filename} = $file;
        }
                

Modified: haver-core/lib/Haver/Savable.pm
===================================================================
--- haver-core/lib/Haver/Savable.pm     2004-04-21 01:51:27 UTC (rev 48)
+++ haver-core/lib/Haver/Savable.pm     2004-04-21 02:30:18 UTC (rev 49)
@@ -21,9 +21,8 @@
 use base 'Haver::Base';
 use YAML ();
 use Fatal qw(:void open close);
-use File::stat;
+use File::stat ();
 
-use IO::File;
 use Haver::Preprocessor;
 use Carp;
 
@@ -33,7 +32,7 @@
 sub initialize {
        my ($me) = @_;
 
-       $me->{_mtime}    = -1;
+       $me->{_mtime}     = -1;
        $me->{_auto_save} = 0;
 }
 
@@ -44,30 +43,44 @@
        local $/ = undef;
 
        ASSERT: defined $filename;
-       open $fh, $filename;
-       my $raw  = readline $fh; # slurp in file
-       my $data = YAML::Load($raw);
-       close $fh;
-       $me->{_mtime} = stat($filename)->mtime;
+       if (-e $filename) {
+               open $fh, $filename;
+               my $raw  = readline $fh; # slurp in file
+               my $data = YAML::Load($raw);
+               close $fh;
+               $me->{_mtime} = File::stat::populate(CORE::stat(_))->mtime;
+               $me->_load_data($data);
+       } else {
+               $me->_init_data;
+       }
 
-       $me->_load($data);
 }
 
+sub _init_data {
+}
+
 sub save {
        my ($me) = @_;
        my $filename = $me->filename;
        my $fh;
 
        ASSERT: defined $filename;
-       my $mtime = stat($filename)->mtime;
+       my $mtime = do {
+               if (-e $filename) {
+                       File::stat::populate(CORE::stat(_))->mtime;
+               } else {
+                       $me->{_mtime};
+               }
+       };
+       ASSERT: defined $mtime;
 
        if ($mtime == $me->{_mtime}) {
                my $fh;
-               my $save = $me->_save or return 0;
+               my $save = $me->_save_data or return 0;
                open $fh, ">$filename";
                print $fh YAML::Dump($save);
                close $fh;
-               $me->{_mtime} = stat($filename)->mtime;
+               $me->{_mtime} = File::stat::stat($filename)->mtime;
                return 1;
        } else {
                carp "Cowardly refusing to overwrite $filename...";
@@ -77,11 +90,11 @@
 
 sub auto_save {
        my ($me, $val) = @_;
-       ASSERT: @_ == 2 or @_ == 3;
+       ASSERT: @_ == 1 or @_ == 2;
 
-       if (@_ == 2) {
+       if (@_ == 1) {
                return $me->{_auto_save};
-       } elsif (@_ == 3) {
+       } elsif (@_ == 2) {
                return $me->{_auto_save} = $val;
        }
 }
@@ -100,16 +113,66 @@
 
 =head1 NAME
 
-Haver::Savable - Save/Load Objects
+Haver::Savable - Framework for persistent objects.
 
 =head1 SYNOPSIS
 
- FIXME 
+ # See the source code for Haver::Config.
 
 =head1 DESCRIPTION
 
-FIXME
+Haver::Savable is a base class for objects that need to have persistency,
+such as config files. Haver::Savable is only a base class, you need
+to inherit from it in order to use it.
 
+
+=head1 METHODS
+
+=head2 new()
+
+the new() constructor creates and returns a new Haver::Savable.
+It takes no options.
+
+
+=head2 save()
+
+This saves data to $self->filename(). It takes no arguments.
+The data saved is returned from $self->_save_data().
+
+=head2 load()
+
+This loads data from $self->filename()
+and passes it to $self->_load_data().
+
+=head2 auto_save($bool)
+
+This gets or sets the auto_save option. If auto_save is true,
+then $self->save() will be called upon object destruction.
+
+The default is false.
+
+=head1 VIRTUAL METHODS
+
+These methods you must define in your subclasses (except
+for the optional one).
+
+=head2 _init_data()
+
+This is optional. If defined, it will be called when
+$self->filename() can not be found. It should probably
+set up default values that will later be saved to $self->filename().
+
+=head2 _load_data($data)
+
+This method should take whatever is in $data and load it into $self
+somehow. The type of $data is application-dependant; generally
+it is whatever $self->_save_data() returns (see below).
+
+=head2 _save_data()
+
+This method should inspect $self and return whatever
+should be written (serialized) to $self->filename().
+
 =head1 SEE ALSO
 
 L<https://savannah.nongnu.org/projects/haver/>





reply via email to

[Prev in Thread] Current Thread [Next in Thread]