File Coverage

lib/Web/ComposableRequest/Role/Session.pm
Criterion Covered Total %
statement 38 38 100.0
branch n/a
condition n/a
subroutine 12 12 100.0
pod 1 1 100.0
total 51 51 100.0


line stmt bran cond sub pod time code
1             package Web::ComposableRequest::Role::Session;
2              
3 1     1   1062 use namespace::autoclean;
  1         3  
  1         12  
4              
5 1     1   109 use Web::ComposableRequest::Constants qw( TRUE );
  1         3  
  1         12  
6 1     1   476 use Web::ComposableRequest::Util qw( add_config_role compose_class );
  1         3  
  1         9  
7 1     1   706 use Unexpected::Types qw( LoadableClass Object );
  1         2  
  1         11  
8 1     1   3456 use Moo::Role;
  1         2  
  1         11  
9              
10             requires qw( loc loc_default query_params _config _env _log );
11              
12             add_config_role __PACKAGE__.'::Config';
13              
14             has 'session' =>
15             is => 'lazy',
16             isa => Object,
17             builder => sub {
18 6     6   1204 my $self = shift;
19              
20             return $self->session_class->new(
21             config => $self->_config,
22             request => $self,
23 6         88 session => $self->_env->{'psgix.session'},
24             );
25             },
26             clearer => TRUE,
27             handles => [ 'authenticated', 'username' ];
28              
29             has 'session_class' =>
30             is => 'lazy',
31             isa => LoadableClass,
32             builder => sub {
33 5     5   44 my $self = shift;
34 5         13 my $conf = $self->_config;
35              
36 5         35 return compose_class(
37             $conf->session_class, $conf->session_attr, is => 'rw'
38             );
39             };
40              
41             sub reset_session {
42 1     1 1 749 my $self = shift;
43 1         5 my $psgix_sess = $self->_env->{ 'psgix.session' };
44              
45 1         2 delete $psgix_sess->{ $_ } for (keys %{ $psgix_sess });
  1         8  
46              
47 1         16 $self->clear_session;
48 1         8 return;
49             }
50              
51             package Web::ComposableRequest::Role::Session::Config;
52              
53 1     1   997 use namespace::autoclean;
  1         3  
  1         6  
54              
55 1     1   78 use Web::ComposableRequest::Constants qw( FALSE TRUE );
  1         54  
  1         8  
56 1         24 use Unexpected::Types qw( ArrayRef Bool CodeRef HashRef NonEmptySimpleStr
57 1     1   478 NonZeroPositiveInt PositiveInt );
  1         3  
58 1     1   4439 use Moo::Role;
  1         2  
  1         6  
59              
60             has 'delete_on_collect' => is => 'ro', isa => Bool, default => TRUE;
61              
62             has 'expire_session' => is => 'lazy', isa => CodeRef,
63             default => sub { sub { [ 'User [_1] session expired', $_[ 0 ]->username ] }};
64              
65             has 'max_messages' => is => 'ro', isa => NonZeroPositiveInt,
66             default => 3;
67              
68             has 'max_sess_time' => is => 'ro', isa => PositiveInt,
69             default => 3_600;
70              
71             has 'serialise_session_attr' => is => 'ro', isa => ArrayRef[NonEmptySimpleStr],
72             default => sub { [] };
73              
74             has 'session_attr' => is => 'ro', isa => HashRef[ArrayRef],
75             default => sub { {} };
76              
77             has 'session_class' => is => 'ro', isa => NonEmptySimpleStr,
78             default => 'Web::ComposableRequest::Session';
79              
80             1;
81              
82             __END__