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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 151 by dpavlin, Wed Jul 16 23:04:22 2008 UTC revision 301 by dpavlin, Wed Nov 5 09:50:14 2008 UTC
# Line 1  Line 1 
1  package Frey::Storage;  package Frey::Storage;
2  use Moose::Role;  use Moose::Role;
3    
4  use YAML::Syck;  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  =head2 store
12    
# Line 18  has 'storage_timestamp' => ( Line 23  has 'storage_timestamp' => (
23  sub store {  sub store {
24          my $self = shift;          my $self = shift;
25          my ( $filename, $data ) = @_;          my ( $filename, $data ) = @_;
26          $filename .= '.yml';          if ( $filename =~ m{\.ya?ml$}i ) {
27          DumpFile( $filename, $data );                  $self->mkbasepath( $filename );
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  =head2 load
# Line 30  sub store { Line 41  sub store {
41    
42  sub load {  sub load {
43          my ( $self, $filename ) = @_;          my ( $self, $filename ) = @_;
44          $filename .= '.yml';          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 );          $self->storage_timestamp->{ $filename } = _path_time( $filename );
52          LoadFile( $filename );          return $data;
53  }  }
54    
55  =head2 reload  =head2 reload
56    
57  Reload file if on-disk copy have changed  Reload file if on-disk copy have changed
58    
59    $o->reload( 'filename.yml', \$data );    my $new_data = $o->reload( 'filename.yml' );
60    
61  =cut  =cut
62    
# Line 48  sub _path_time { Line 65  sub _path_time {
65  }  }
66    
67  sub reload {  sub reload {
68          my ( $self, $filename, $data ) = @_;          my ( $self, $filename ) = @_;
69          my $path = $filename . '.yml';          return if defined $self->storage_timestamp->{ $filename } && $self->storage_timestamp->{ $filename } == _path_time( $filename );
         return if ( $self->storage_timestamp->{ $path } == _path_time( $path ) );  
70          warn "# reload $filename" if $self->debug;          warn "# reload $filename" if $self->debug;
71          $$data = $self->load( $filename );          $self->load( $filename );
         $data;  
72  }  }
73    
74  1;  1;

Legend:
Removed from v.151  
changed lines
  Added in v.301

  ViewVC Help
Powered by ViewVC 1.1.26