/[Frey]/trunk/lib/Frey/Storage.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/lib/Frey/Storage.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 151 - (show annotations)
Wed Jul 16 23:04:22 2008 UTC (15 years, 9 months ago) by dpavlin
File size: 950 byte(s)
Frey::Storage to save files on disk (and reload them)
1 package Frey::Storage;
2 use Moose::Role;
3
4 use YAML::Syck;
5
6 =head2 store
7
8 $o->store( 'filename.yml', $data );
9
10 =cut
11
12 has 'storage_timestamp' => (
13 is => 'rw',
14 isa => 'HashRef[Int]',
15 default => sub { {} },
16 );
17
18 sub store {
19 my $self = shift;
20 my ( $filename, $data ) = @_;
21 $filename .= '.yml';
22 DumpFile( $filename, $data );
23 }
24
25 =head2 load
26
27 $data = $o->load( 'filename.yml' );
28
29 =cut
30
31 sub load {
32 my ( $self, $filename ) = @_;
33 $filename .= '.yml';
34 $self->storage_timestamp->{ $filename } = _path_time( $filename );
35 LoadFile( $filename );
36 }
37
38 =head2 reload
39
40 Reload file if on-disk copy have changed
41
42 $o->reload( 'filename.yml', \$data );
43
44 =cut
45
46 sub _path_time {
47 (stat( $_[0] ))[9]; # mtime
48 }
49
50 sub reload {
51 my ( $self, $filename, $data ) = @_;
52 my $path = $filename . '.yml';
53 return if ( $self->storage_timestamp->{ $path } == _path_time( $path ) );
54 warn "# reload $filename" if $self->debug;
55 $$data = $self->load( $filename );
56 $data;
57 }
58 1;

  ViewVC Help
Powered by ViewVC 1.1.26