/[Frey]/branches/zimbardo/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 /branches/zimbardo/lib/Frey/Storage.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1189 - (hide annotations)
Mon Sep 28 20:23:45 2009 UTC (14 years, 8 months ago) by dpavlin
File size: 1660 byte(s)
use Storage to store files with exstension .st(orgage)
1 dpavlin 151 package Frey::Storage;
2     use Moose::Role;
3    
4 dpavlin 224 with 'Frey::Path';
5    
6 dpavlin 153 #use YAML::Syck; # XXX doesn't play nice with Continuity
7 dpavlin 1189 use YAML qw//;
8     use File::Slurp qw//;
9     use Storable qw//;
10 dpavlin 301 use Carp qw/croak carp/;
11 dpavlin 151
12     =head2 store
13    
14     $o->store( 'filename.yml', $data );
15    
16     =cut
17    
18     has 'storage_timestamp' => (
19     is => 'rw',
20     isa => 'HashRef[Int]',
21     default => sub { {} },
22     );
23    
24     sub store {
25     my $self = shift;
26     my ( $filename, $data ) = @_;
27 dpavlin 539 $self->mkbasepath( $filename );
28 dpavlin 301 if ( $filename =~ m{\.ya?ml$}i ) {
29 dpavlin 1189 YAML::DumpFile( $filename, $data );
30     } elsif ( $filename =~ m{\.sto?r?a?b?l?e?$} ) {
31     Storable::store $data => $filename;
32 dpavlin 301 } else {
33     croak "without extension we can save only scalar data" if ref($data);
34 dpavlin 1189 File::Slurp::write_file( $filename, $data );
35 dpavlin 301 }
36     carp "created $filename ", -s $filename;
37 dpavlin 151 }
38    
39     =head2 load
40    
41     $data = $o->load( 'filename.yml' );
42    
43     =cut
44    
45     sub load {
46     my ( $self, $filename ) = @_;
47 dpavlin 153 return if ! -e $filename;
48 dpavlin 301 my $data;
49     if ( $filename =~ m{\.ya?ml}i ) {
50 dpavlin 1189 $data = YAML::LoadFile( $filename );
51     } elsif ( $filename =~ m{\.stor?a?b?l?e?$} ) {
52     $data = Storable::retrieve $filename;
53 dpavlin 301 } else {
54 dpavlin 1189 $data = File::Slurp::read_file( $filename );
55 dpavlin 301 }
56 dpavlin 151 $self->storage_timestamp->{ $filename } = _path_time( $filename );
57 dpavlin 301 return $data;
58 dpavlin 151 }
59    
60     =head2 reload
61    
62     Reload file if on-disk copy have changed
63    
64 dpavlin 153 my $new_data = $o->reload( 'filename.yml' );
65 dpavlin 151
66     =cut
67    
68     sub _path_time {
69     (stat( $_[0] ))[9]; # mtime
70     }
71    
72     sub reload {
73 dpavlin 153 my ( $self, $filename ) = @_;
74 dpavlin 301 return if defined $self->storage_timestamp->{ $filename } && $self->storage_timestamp->{ $filename } == _path_time( $filename );
75 dpavlin 151 warn "# reload $filename" if $self->debug;
76 dpavlin 153 $self->load( $filename );
77 dpavlin 151 }
78 dpavlin 153
79 dpavlin 1133 no Moose::Role;
80    
81 dpavlin 151 1;

  ViewVC Help
Powered by ViewVC 1.1.26