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

  ViewVC Help
Powered by ViewVC 1.1.26