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   549 use namespace::autoclean;
  1         1  
  1         7  
4              
5 1     1   61 use Web::ComposableRequest::Constants qw( TRUE );
  1         1  
  1         7  
6 1     1   242 use Web::ComposableRequest::Util qw( add_config_role compose_class );
  1         2  
  1         6  
7 1     1   279 use Unexpected::Types qw( LoadableClass Object );
  1         2  
  1         5  
8 1     1   427 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   765 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   41 my $conf = $_[ 0 ]->_config;
23 5         28 compose_class( $conf->session_class, $conf->session_attr, is => 'rw' ) };
24              
25             sub reset_session {
26 1     1 1 398 my $self = shift; my $psgix_sess = $self->_env->{ 'psgix.session' };
  1         4  
27              
28 1         2 delete $psgix_sess->{ $_ } for (keys %{ $psgix_sess });
  1         6  
29              
30 1         21 $self->clear_session;
31 1         6 return;
32             }
33              
34             package Web::ComposableRequest::Role::Session::Config;
35              
36 1     1   386 use namespace::autoclean;
  1         2  
  1         3  
37              
38 1     1   39 use Web::ComposableRequest::Constants qw( FALSE );
  1         2  
  1         3  
39 1         4 use Unexpected::Types qw( ArrayRef CodeRef HashRef NonEmptySimpleStr
40 1     1   167 NonZeroPositiveInt PositiveInt );
  1         1  
41 1     1   617 use Moo::Role;
  1         1  
  1         3  
42              
43             has 'expire_session' => is => 'lazy', isa => CodeRef,
44             builder => sub { sub {
45 1     1   33 [ 'User [_1] session expired', $_[ 0 ]->username ] } };
  1     1   26  
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   197 builder => sub { {} };
53              
54             has 'session_class' => is => 'ro', isa => NonEmptySimpleStr,
55             default => 'Web::ComposableRequest::Session';
56              
57             1;
58              
59             __END__