/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 151 - (hide 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 dpavlin 151 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