/[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 1133 - (hide annotations)
Tue Jun 30 15:10:55 2009 UTC (14 years, 9 months ago) by dpavlin
File size: 1440 byte(s)
make classes immutable and remove moose droppings to make Perl::Critic::Moose happy
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     use YAML qw/LoadFile DumpFile/;
8 dpavlin 301 use File::Slurp;
9     use Carp qw/croak carp/;
10 dpavlin 151
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 dpavlin 539 $self->mkbasepath( $filename );
27 dpavlin 301 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 dpavlin 151 }
35    
36     =head2 load
37    
38     $data = $o->load( 'filename.yml' );
39    
40     =cut
41    
42     sub load {
43     my ( $self, $filename ) = @_;
44 dpavlin 153 return if ! -e $filename;
45 dpavlin 301 my $data;
46     if ( $filename =~ m{\.ya?ml}i ) {
47     $data = LoadFile( $filename );
48     } else {
49     $data = read_file( $filename );
50     }
51 dpavlin 151 $self->storage_timestamp->{ $filename } = _path_time( $filename );
52 dpavlin 301 return $data;
53 dpavlin 151 }
54    
55     =head2 reload
56    
57     Reload file if on-disk copy have changed
58    
59 dpavlin 153 my $new_data = $o->reload( 'filename.yml' );
60 dpavlin 151
61     =cut
62    
63     sub _path_time {
64     (stat( $_[0] ))[9]; # mtime
65     }
66    
67     sub reload {
68 dpavlin 153 my ( $self, $filename ) = @_;
69 dpavlin 301 return if defined $self->storage_timestamp->{ $filename } && $self->storage_timestamp->{ $filename } == _path_time( $filename );
70 dpavlin 151 warn "# reload $filename" if $self->debug;
71 dpavlin 153 $self->load( $filename );
72 dpavlin 151 }
73 dpavlin 153
74 dpavlin 1133 no Moose::Role;
75    
76 dpavlin 151 1;

  ViewVC Help
Powered by ViewVC 1.1.26