File Coverage

lib/Web/ComposableRequest/Role/Session.pm
Criterion Covered Total %
statement 39 39 100.0
branch n/a
condition n/a
subroutine 15 15 100.0
pod 1 1 100.0
total 55 55 100.0


line stmt bran cond sub pod time code
1             package Web::ComposableRequest::Role::Session;
2              
3 1     1   553 use namespace::autoclean;
  1         3  
  1         6  
4              
5 1     1   64 use Web::ComposableRequest::Constants qw( TRUE );
  1         2  
  1         7  
6 1     1   247 use Web::ComposableRequest::Util qw( add_config_role compose_class );
  1         2  
  1         7  
7 1     1   405 use Unexpected::Types qw( LoadableClass Object );
  1         2  
  1         6  
8 1     1   613 use Moo::Role;
  1         2  
  1         6  
9              
10             requires qw( loc loc_default query_params _config _env _log );
11              
12             add_config_role __PACKAGE__.'::Config';
13              
14             has 'session' => is => 'lazy', isa => Object, builder => sub {
15             return $_[ 0 ]->session_class->new
16             ( config => $_[ 0 ]->_config,
17             request => $_[ 0 ],
18 6     6   1182 session => $_[ 0 ]->_env->{ 'psgix.session' }, ) },
19             clearer => TRUE, handles => [ 'authenticated', 'username' ];
20              
21             has 'session_class' => is => 'lazy', isa => LoadableClass, builder => sub {
22 5     5   73 my $conf = $_[ 0 ]->_config;
23 5         40 compose_class( $conf->session_class, $conf->session_attr, is => 'rw' ) };
24              
25             sub reset_session {
26 1     1 1 681 my $self = shift; my $psgix_sess = $self->_env->{ 'psgix.session' };
  1         5  
27              
28 1         3 delete $psgix_sess->{ $_ } for (keys %{ $psgix_sess });
  1         8  
29              
30 1         23 $self->clear_session;
31 1         8 return;
32             }
33              
34             package Web::ComposableRequest::Role::Session::Config;
35              
36 1     1   452 use namespace::autoclean;
  1         2  
  1         4  
37              
38 1     1   49 use Web::ComposableRequest::Constants qw( FALSE );
  1         2  
  1         3  
39 1         3 use Unexpected::Types qw( ArrayRef CodeRef HashRef NonEmptySimpleStr
40 1     1   187 NonZeroPositiveInt PositiveInt );
  1         3  
41 1     1   1021 use Moo::Role;
  1         3  
  1         4  
42              
43             has 'expire_session' => is => 'lazy', isa => CodeRef,
44             builder => sub { sub {
45 1     1   41 [ 'User [_1] session expired', $_[ 0 ]->username ] } };
  1     1   32  
46              
47             has 'max_messages' => is => 'ro', isa => NonZeroPositiveInt, default => 3;
48              
49             has 'max_sess_time' => is => 'ro', isa => PositiveInt, default => 3_600;
50              
51             has 'session_attr' => is => 'ro', isa => HashRef[ArrayRef],
52 1     1   266 builder => sub { {} };
53              
54             has 'session_class' => is => 'ro', isa => NonEmptySimpleStr,
55             default => 'Web::ComposableRequest::Session';
56              
57             1;
58              
59             __END__