File Coverage

blib/lib/Apache/Session/Browseable/File.pm
Criterion Covered Total %
statement 55 58 94.8
branch 10 14 71.4
condition 2 6 33.3
subroutine 11 11 100.0
pod 0 2 0.0
total 78 91 85.7


line stmt bran cond sub pod time code
1             package Apache::Session::Browseable::File;
2              
3 2     2   819404 use strict;
  2         5  
  2         95  
4              
5 2     2   1414 use Apache::Session;
  2         4760  
  2         99  
6 2     2   1317 use Apache::Session::Lock::File;
  2         9084  
  2         86  
7 2     2   1323 use Apache::Session::Browseable::Store::File;
  2         9  
  2         89  
8 2     2   1301 use Apache::Session::Generate::SHA256;
  2         9  
  2         93  
9 2     2   1398 use Apache::Session::Serialize::JSON;
  2         8  
  2         95  
10 2     2   1257 use Apache::Session::Browseable::_common;
  2         9  
  2         247  
11              
12 2   33 2   17 use constant SL => ( $^O and $^O =~ /(?:MSWin|Windows)/i ? '\\' : '/' );
  2         8  
  2         4973  
13              
14             our $VERSION = '1.3.5';
15             our @ISA = qw(Apache::Session Apache::Session::Browseable::_common);
16              
17             sub populate {
18 28     28 0 4304 my $self = shift;
19              
20 28         203 $self->{object_store} = new Apache::Session::Browseable::Store::File $self;
21 28         877 $self->{lock_manager} = new Apache::Session::Lock::File $self;
22 28         282 $self->{generate} = \&Apache::Session::Generate::SHA256::generate;
23 28         129 $self->{validate} = \&Apache::Session::Generate::SHA256::validate;
24 28         65 $self->{serialize} = \&Apache::Session::Serialize::JSON::serialize;
25 28         57 $self->{unserialize} = \&Apache::Session::Serialize::JSON::unserialize;
26              
27 28         63 return $self;
28             }
29              
30             sub DESTROY {
31 28     28   26316 my $self = shift;
32              
33 28         133 $self->save;
34 28         5707 $self->{object_store}->close;
35 28         11621 $self->release_all_locks;
36             }
37              
38             sub get_key_from_all_sessions {
39 11     11 0 577 my ( $class, $args, $data ) = @_;
40 11   33     46 $args->{Directory} ||= $Apache::Session::Store::File::Directory;
41              
42 11 50       668 unless ( opendir DIR, $args->{Directory} ) {
43 0         0 die "Cannot open directory $args->{Directory}\n";
44             }
45             my @t =
46 11 100       571 grep { -f $args->{Directory} . SL . $_ and /^[A-Za-z0-9@\-]+$/ }
  330         4971  
47             readdir(DIR);
48 11         175 closedir DIR;
49 11         26 my %res;
50 11         33 for my $f (@t) {
51 308         555 eval {
52 308 50       15388 open F, $args->{Directory} . SL . $f or die $!;
53 308         5286 my $row = join '', ;
54 308 100       1230 if ( ref($data) eq 'CODE' ) {
    100          
55 224         832 $res{$f} =
56             &$data( &Apache::Session::Serialize::JSON::_unserialize($row),
57             $f );
58             }
59             elsif ($data) {
60 56 50       175 $data = [$data] unless ( ref($data) );
61 56         179 my $tmp = &Apache::Session::Serialize::JSON::_unserialize($row);
62 56         444 $res{$f}->{$_} = $tmp->{$_} foreach (@$data);
63             }
64             else {
65 28         92 $res{$f} =
66             &Apache::Session::Serialize::JSON::_unserialize($row);
67             }
68             };
69 308 50       1063 if ($@) {
70 0         0 print STDERR "Error in session $f: $@\n";
71 0         0 delete $res{$f};
72             }
73             }
74 11         398 return \%res;
75             }
76              
77             1;
78             __END__