File Coverage

blib/lib/Dancer2/Session/CGISession.pm
Criterion Covered Total %
statement 13 15 86.6
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 20 90.0


line stmt bran cond sub pod time code
1             package Dancer2::Session::CGISession;
2              
3 1     1   11736 use strict;
  1         2  
  1         25  
4 1     1   15 use 5.008_005;
  1         2  
  1         32  
5             our $VERSION = '0.02';
6              
7 1     1   383 use Moo;
  1         10072  
  1         6  
8 1     1   1049 use Carp;
  1         1  
  1         73  
9 1     1   840 use Dancer2::Core::Types;
  0            
  0            
10             use CGI::Session;
11              
12             with 'Dancer2::Core::Role::SessionFactory';
13              
14             #------------------------------------#
15             # Attributes
16             #------------------------------------#
17              
18             has driver_params => (
19             is => 'ro',
20             default => sub { {}; }
21             );
22              
23             has driver => (
24             is => 'ro',
25             default => sub { 'driver:File'; }
26             );
27              
28             has name => (
29             is => 'ro',
30             default => sub { 'CGISESSID'; }
31             );
32              
33             #------------------------------------#
34             # Role composition
35             #------------------------------------#
36              
37             #might be possible to do something with CGI::Session find method here
38             sub _sessions {
39             my ($self) = @_;
40             return [];
41             }
42              
43             sub generate_id {
44             my ( $class ) = @_;
45              
46             #creation of the cgi session when generating the id, as it using dancer2 id to create CGI session seems not to be working
47             my $cgi_session = CGI::Session->new(
48             $class->driver,
49             undef,
50             $class->driver_params
51             ) or die CGI::Session->errstr();;
52             $cgi_session->expire( $class->session_duration );
53             $cgi_session->name( $class->cookie_name );
54              
55             #Return the newly created CGI::Session id
56             return $cgi_session->id();
57             }
58              
59             sub _retrieve {
60             my ( $class, $id ) = @_;
61              
62             my $cgi_session = $class->get_cgi_session( $id );
63             if( $cgi_session->is_empty or $cgi_session->is_expired ) {
64             # CGI Session has been removed from the server, die here, Dancer2::Core::Role::Session
65             # knows how to deal with that, warn Caller by dying
66             die "CGI Session has disappeared";
67             }
68              
69             return $cgi_session->dataref();
70             }
71              
72             sub _destroy {
73             my ( $class, $id ) = @_;
74              
75             my $cgi_session = $class->get_cgi_session( $id );
76             if( defined $cgi_session->id ) {
77             $cgi_session->delete;
78             $cgi_session->flush;
79             }
80             }
81              
82             sub _flush {
83             my ( $class, $id, $data ) = @_;
84              
85             my $cgi_session = $class->get_cgi_session( $id );
86             $cgi_session->param( %{$data} );
87             $cgi_session->flush;
88             }
89              
90             sub get_cgi_session {
91             my ( $class, $id ) = @_;
92              
93             my $cgi_session = CGI::Session->load( $class->driver, $id, $class->driver_params )
94             or die CGI::Session->errstr();
95              
96             return $cgi_session;
97             }
98              
99             1;
100             __END__