File Coverage

blib/lib/HTTP/Session/Store/CHI.pm
Criterion Covered Total %
statement 36 38 94.7
branch 8 10 80.0
condition 5 6 83.3
subroutine 11 12 91.6
pod 5 6 83.3
total 65 72 90.2


line stmt bran cond sub pod time code
1             package HTTP::Session::Store::CHI;
2 1     1   173622 use strict;
  1         2  
  1         35  
3 1     1   4 use warnings;
  1         1  
  1         65  
4 1     1   5 use base qw/Class::Accessor::Fast/;
  1         1  
  1         91  
5 1     1   13 use CHI;
  1         1  
  1         24  
6 1     1   3 use Encode qw( encode_utf8 is_utf8 );
  1         2  
  1         524  
7              
8             __PACKAGE__->mk_ro_accessors(qw/chi expires/);
9              
10             sub new {
11 2     2 1 86265 my $class = shift;
12 2 50       15 my %args = ref($_[0]) ? %{$_[0]} : @_;
  0         0  
13             # check required parameters
14 2         6 for (qw/chi expires/) {
15 4 50       16 Carp::croak "missing parameter $_" unless $args{$_};
16             }
17             # coerce
18 2 100 66     18 if (ref $args{chi} && ref $args{chi} eq 'HASH') {
19 1         2 $args{chi} = CHI->new(%{$args{chi}});
  1         7  
20             }
21 2         871 bless {%args}, $class;
22             }
23              
24             sub _filter_sid($) {
25 40     40   194 my $session_id = shift;
26 40 100       138 $session_id = encode_utf8($session_id) if is_utf8($session_id);
27 40 100 100     156 if ($session_id =~ /[\x00-\x20\x7f-\xff]/ || length($session_id) > 250) {
28 24         194 die "detected memcached injection: $session_id";
29             }
30 16         173 return $session_id;
31             }
32              
33             sub select {
34 16     16 1 6344 my ( $self, $session_id ) = @_;
35 16         332 my $data = $self->chi->get(_filter_sid $session_id);
36             }
37              
38             sub insert {
39 12     12 1 5071 my ($self, $session_id, $data) = @_;
40 12         289 $self->chi->set( _filter_sid($session_id), $data, $self->expires );
41             }
42              
43             sub update {
44 10     10 1 6213 my ($self, $session_id, $data) = @_;
45 10         273 $self->chi->set( _filter_sid($session_id), $data, $self->expires );
46             }
47              
48             sub delete {
49 2     2 1 1259 my ($self, $session_id) = @_;
50 2         42 $self->chi->remove( _filter_sid($session_id) );
51             }
52              
53 0     0 0   sub cleanup { Carp::croak "This storage doesn't support cleanup" }
54              
55             1;
56             __END__