diff options
author | dakkar <dakkar@luxion> | 2007-09-09 09:21:10 +0000 |
---|---|---|
committer | dakkar <dakkar@luxion> | 2007-09-09 09:21:10 +0000 |
commit | 46c5091e8befe5da53574e712038cba975245f02 (patch) | |
tree | 75526ba9a3c74efaed6d294ae74630609ab2429a | |
parent | symlink following, and most parsers for the test (diff) | |
download | WebCoso-46c5091e8befe5da53574e712038cba975245f02.tar.gz WebCoso-46c5091e8befe5da53574e712038cba975245f02.tar.bz2 WebCoso-46c5091e8befe5da53574e712038cba975245f02.zip |
parser call on putting scalar
git-svn-id: svn://luxion/repos/WebCoso/trunk@285 fcb26f47-9200-0410-b104-b98ab5b095f3
-rw-r--r-- | lib/File/Cache/Parsed.pm | 22 | ||||
-rw-r--r-- | t/fcp-01.t | 8 |
2 files changed, 29 insertions, 1 deletions
diff --git a/lib/File/Cache/Parsed.pm b/lib/File/Cache/Parsed.pm index f6930d3..a3843d1 100644 --- a/lib/File/Cache/Parsed.pm +++ b/lib/File/Cache/Parsed.pm @@ -28,6 +28,9 @@ sub add_parser { else { push @{$self->{parsers}},[$rx,$parser]; } + + $self->invalidate($rx); + return; } @@ -57,6 +60,17 @@ sub del_parser { return; } +sub del_writer { + my ($self,$rx)=@_; + + my $i=firstidx {$_->[0] eq $rx} @{$self->{writers}}; + return if $i<0; + + splice @{$self->{writers}},$i,1; + + return; +} + sub get { my ($self,$filename)=@_; @@ -86,7 +100,13 @@ sub put { return $ww->[1]->($filename,$contents); } elsif (!ref($contents)) { - $self->{cache}{$filename}=$contents; + my $pp=first {$filename =~ m{$_->[0]}} @{$self->{parsers}}; + if ($pp) { + $self->{cache}{$filename}=$pp->[1]->($filename,$contents); + } + else { + $self->{cache}{$filename}=$contents; + } return print {file($filename)->openw} $contents; } else { @@ -103,4 +103,12 @@ is($calls{stuff},3,'called ok 4'); is($wr_file->slurp,"gino\n${wr_contents}",'written ok 3 (ref)'); is_deeply($fc->get($wr_file->stringify),$wr_contents,'no stringification'); ok(! exists $calls{rstuff},'no reader call'); + +$fc->del_writer(qr{\.stuff$}); +$wr_contents='buh'; +$fc->put($wr_file->stringify,$wr_contents); +is($calls{rstuff},1,'called reader'); +is($fc->get($wr_file->stringify), + 'bad', + 'parsed after put'); } |