/[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 539 - (show annotations)
Wed Nov 26 17:57:58 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 1423 byte(s)
make base path for all data types
1 package Frey::Storage;
2 use Moose::Role;
3
4 with 'Frey::Path';
5
6 #use YAML::Syck; # XXX doesn't play nice with Continuity
7 use YAML qw/LoadFile DumpFile/;
8 use File::Slurp;
9 use Carp qw/croak carp/;
10
11 =head2 store
12
13 $o->store( 'filename.yml', $data );
14
15 =cut
16
17 has 'storage_timestamp' => (
18 is => 'rw',
19 isa => 'HashRef[Int]',
20 default => sub { {} },
21 );
22
23 sub store {
24 my $self = shift;
25 my ( $filename, $data ) = @_;
26 $self->mkbasepath( $filename );
27 if ( $filename =~ m{\.ya?ml$}i ) {
28 DumpFile( $filename, $data );
29 } else {
30 croak "without extension we can save only scalar data" if ref($data);
31 write_file( $filename, $data );
32 }
33 carp "created $filename ", -s $filename;
34 }
35
36 =head2 load
37
38 $data = $o->load( 'filename.yml' );
39
40 =cut
41
42 sub load {
43 my ( $self, $filename ) = @_;
44 return if ! -e $filename;
45 my $data;
46 if ( $filename =~ m{\.ya?ml}i ) {
47 $data = LoadFile( $filename );
48 } else {
49 $data = read_file( $filename );
50 }
51 $self->storage_timestamp->{ $filename } = _path_time( $filename );
52 return $data;
53 }
54
55 =head2 reload
56
57 Reload file if on-disk copy have changed
58
59 my $new_data = $o->reload( 'filename.yml' );
60
61 =cut
62
63 sub _path_time {
64 (stat( $_[0] ))[9]; # mtime
65 }
66
67 sub reload {
68 my ( $self, $filename ) = @_;
69 return if defined $self->storage_timestamp->{ $filename } && $self->storage_timestamp->{ $filename } == _path_time( $filename );
70 warn "# reload $filename" if $self->debug;
71 $self->load( $filename );
72 }
73
74 1;

  ViewVC Help
Powered by ViewVC 1.1.26