File Coverage

blib/lib/HTTP/Session/Store/DBM.pm
Criterion Covered Total %
statement 34 39 87.1
branch 4 8 50.0
condition 4 5 80.0
subroutine 10 13 76.9
pod 5 7 71.4
total 57 72 79.1


line stmt bran cond sub pod time code
1             package HTTP::Session::Store::DBM;
2 2     2   38349 use strict;
  2         5  
  2         76  
3 2     2   8 use warnings;
  2         4  
  2         169  
4 2     2   13 use base qw/Class::Accessor::Fast/;
  2         43  
  2         203  
5 2     2   13 use Fcntl;
  2         4  
  2         623  
6 2     2   1360 use Storable;
  2         9935  
  2         165  
7 2     2   14 use Module::Runtime ();
  2         5  
  2         838  
8              
9             __PACKAGE__->mk_ro_accessors(qw/file dbm_class/);
10              
11             sub new {
12 4     4 1 288159 my $class = shift;
13 4 50       22 my %args = ref($_[0]) ? %{$_[0]} : @_;
  0         0  
14             # check required parameters
15 4         12 for (qw/file/) {
16 4 50       18 Carp::croak "missing parameter $_" unless $args{$_};
17             }
18             # set default values
19 4   100     22 $args{dbm_class} ||= 'SDBM_File';
20 4         49 bless {%args}, $class;
21             }
22              
23             sub dbm {
24 6     6 0 259 my $self = shift;
25 6   66     200 $self->{dbm} ||= do {
26 4         9 my %hash;
27 4 50       157 Module::Runtime::require_module($self->dbm_class) or die $@;
28 4 50       7407 tie %hash, $self->dbm_class, $self->file, O_CREAT | O_RDWR, oct("600") or die "Cannot open dbm file for session: $self->{dbm_class}, $self->{file}";
29 4         1064 \%hash;
30             };
31             }
32              
33             sub select {
34 4     4 1 33 my ( $self, $key ) = @_;
35 4         14 Storable::thaw $self->dbm->{$key};
36             }
37              
38             sub insert {
39 2     2 1 88 my ( $self, $key, $value ) = @_;
40 2         10 $self->dbm->{$key} = Storable::freeze $value;
41             }
42 0     0 1   sub update { shift->insert(@_) }
43              
44             sub delete {
45 0     0 1   my ( $self, $key ) = @_;
46 0           delete $self->dbm->{$key};
47             }
48              
49 0     0 0   sub cleanup { Carp::croak "This storage doesn't support cleanup" }
50              
51             1;
52             __END__