From 46c5091e8befe5da53574e712038cba975245f02 Mon Sep 17 00:00:00 2001 From: dakkar Date: Sun, 9 Sep 2007 09:21:10 +0000 Subject: parser call on putting scalar git-svn-id: svn://luxion/repos/WebCoso/trunk@285 fcb26f47-9200-0410-b104-b98ab5b095f3 --- lib/File/Cache/Parsed.pm | 22 +++++++++++++++++++++- t/fcp-01.t | 8 ++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) 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 { diff --git a/t/fcp-01.t b/t/fcp-01.t index 49a2d66..88ed9bf 100644 --- a/t/fcp-01.t +++ b/t/fcp-01.t @@ -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'); } -- cgit v1.2.3