File Coverage

blib/lib/App/PAIA/File.pm
Criterion Covered Total %
statement 42 43 97.6
branch 7 10 70.0
condition 12 19 63.1
subroutine 11 11 100.0
pod 0 8 0.0
total 72 91 79.1


line stmt bran cond sub pod time code
1             package App::PAIA::File;
2 4     4   15 use strict;
  4         4  
  4         100  
3 4     4   35 use v5.10;
  4         10  
  4         153  
4              
5             our $VERSION = '0.29';
6              
7 4     4   12 use App::PAIA::JSON;
  4         5  
  4         1468  
8              
9             our %DEFAULT = (
10             'config' => 'paia.json',
11             'session' => 'paia-session.json'
12             );
13              
14             sub new {
15 34     34 0 312 my $class = shift;
16 34         129 my $self = bless { @_ }, $class;
17              
18 34 100 66     801 $self->{file} //= $DEFAULT{ $self->{type} }
19             if -e $DEFAULT{ $self->{type} };
20              
21 34         112 $self;
22             }
23              
24             sub file {
25 54 50   54 0 275 @_ > 1 ? ($_[0]->{file} = $_[1]) : $_[0]->{file};
26             }
27              
28             sub get {
29 75     75 0 66 my ($self, $key) = @_;
30 75   66     153 $self->{data} //= $self->load;
31 75         266 $self->{data}->{$key};
32             }
33              
34             sub delete {
35 1     1 0 3 my ($self, $key) = @_;
36 1   33     4 $self->{data} //= $self->load;
37 1         3 delete $self->{data}->{$key};
38             }
39              
40             sub set {
41 14     14 0 25 my ($self, $key, $value) = @_;
42 14   100     36 $self->{data} //= { };
43 14         37 $self->{data}->{$key} = $value;
44             }
45              
46             sub load {
47 28     28 0 34 my ($self) = @_;
48              
49 28         37 my $type = $self->{type};
50 28   100     53 my $file = $self->file // return($self->{data} = { });
51            
52 16         61 local $/;
53 16 100       553 open (my $fh, '<', $file)
54             or die "failed to open $type file $file\n";
55 15         368 $self->{data} = decode_json(<$fh>,$file);
56 15         191 close $fh;
57            
58 15         72 $self->{logger}->("loaded $type file $file");
59            
60 15         172 $self->{data};
61             }
62              
63             sub store {
64 10     10 0 20 my ($self) = @_;
65 10         18 my $type = $self->{type};
66 10   66     18 my $file = $self->file // $DEFAULT{$type};
67              
68 10 50       851 open (my $fh, '>', $file)
69             or die "failed to open $type file $file\n";
70 10         18 print {$fh} encode_json($self->{data});
  10         56  
71 10         2701 close $fh;
72              
73 10         828 $self->{logger}->("saved $type file $file");
74             }
75              
76             sub purge {
77 4     4 0 10 my ($self) = @_;
78              
79 4 50 33     10 return unless defined $self->file && -e $self->file;
80 0           unlink $self->file;
81             }
82              
83             1;
84             __END__