File Coverage

blib/lib/Data/Keys/E/Dir/Auto.pm
Criterion Covered Total %
statement 18 18 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 24 24 100.0


line stmt bran cond sub pod time code
1             package Data::Keys::E::Dir::Auto;
2              
3             =head1 NAME
4              
5             Data::Keys::E::Dir::Auto - auto create folder when needed
6              
7             =head1 DESCRIPTION
8              
9             When the key fails to do set a folder part from the key is extracted and when the
10             folder doesn't exist, it is created.
11              
12             =cut
13              
14 2     2   2094 use warnings;
  2         3  
  2         60  
15 2     2   6 use strict;
  2         1  
  2         65  
16              
17             our $VERSION = '0.03';
18              
19 2     2   409 use Moose::Role;
  2         3536  
  2         9  
20 2     2   7011 use File::Basename 'dirname';
  2         2  
  2         108  
21 2     2   8 use Carp::Clan 'confess', 'croak';
  2         4  
  2         11  
22 2     2   316 use File::Path 'mkpath';
  2         2  
  2         351  
23              
24             has 'auto_folders' => ( isa => 'Bool', is => 'rw', default => 1 );
25              
26             requires('set');
27              
28             around 'set' => sub {
29             my $set = shift;
30             my $self = shift;
31             my $key = shift;
32             my $value = shift;
33            
34             # call set
35             my $ret = eval { $self->$set($key, $value); };
36             if ($@) {
37             my ($new_key, $filename) = $self->_make_filename($key);
38             my $folder = dirname($filename);
39             # check if we need to create a folder
40             if (not -d $folder and $self->auto_folders) {
41             mkpath($folder)
42             or croak 'failed to store "'.$key.'", folder "'.$folder.'" could not be create - '.$!;
43             }
44             $ret = eval { $self->$set($key, $value); };
45             croak $@
46             if $@;
47             }
48            
49             return $ret;
50             };
51              
52             1;
53              
54              
55             __END__
56              
57             =head1 AUTHOR
58              
59             Jozef Kutej
60              
61             =cut