[Top][All Lists]
[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/>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Haver-commits] r49 - haver-core/lib/Haver,
dylan <=