Coverage Summary

# File Coverage

blib/lib/Prancer/Session/Store/YAML.pm
Criterion | Covered | Total | %
--- | --- | --- | ---
statement | 24 | 41 | 58.5
branch | 0 | 8 | 0.0
condition | 0 | 2 | 0.0
subroutine | 8 | 11 | 72.7
pod | 1 | 1 | 100.0
total | 33 | 63 | 52.4

line | stmt | bran | cond | sub | pod | time | code
--- | --- | --- | --- | --- | --- | --- | ---
1 |  |  |  |  |  |  | package Prancer::Session::Store::YAML;
2 |  |  |  |  |  |  |
3 | 4 |  |  | 4 |  | 2588 | use strict;
| 4 |  |  |  |  | 5 |
| 4 |  |  |  |  | 109 |
4 | 4 |  |  | 4 |  | 10 | use warnings FATAL => 'all';
| 4 |  |  |  |  | 2 |
| 4 |  |  |  |  | 85 |
5 |  |  |  |  |  |  |
6 | 4 |  |  | 4 |  | 738 | use Plack::Session::Store::File;
| 4 |  |  |  |  | 1476 |
| 4 |  |  |  |  | 96 |
7 | 4 |  |  | 4 |  | 12 | use parent qw(Plack::Session::Store::File);
| 4 |  |  |  |  | 2 |
| 4 |  |  |  |  | 8 |
8 |  |  |  |  |  |  |
9 | 4 |  |  | 4 |  | 143 | use Carp;
| 4 |  |  |  |  | 3 |
| 4 |  |  |  |  | 233 |
10 | 4 |  |  | 4 |  | 13 | use Cwd ();
| 4 |  |  |  |  | 3 |
| 4 |  |  |  |  | 65 |
11 | 4 |  |  | 4 |  | 1076 | use YAML ();
| 4 |  |  |  |  | 17295 |
| 4 |  |  |  |  | 100 |
12 | 4 |  |  | 4 |  | 16 | use Prancer qw(logger);
| 4 |  |  |  |  | 5 |
| 4 |  |  |  |  | 967 |
13 |  |  |  |  |  |  |
14 |  |  |  |  |  |  | sub new {
15 | 0 |  |  | 0 | 1 |  | my ($class, $config) = @_;
16 |  |  |  |  |  |  |
17 |  |  |  |  |  |  | return try {
18 | 0 |  | 0 |  |  |  | my $path = Cwd::realpath(delete($config->{'path'}) || '/tmp');
19 | 0 | 0 |  |  |  |  | die "${path} does not exist\n" unless (-e $path);
20 | 0 | 0 |  |  |  |  | die "${path} is not readable\n" unless (-r $path);
21 |  |  |  |  |  |  |
22 |  |  |  |  |  |  | # i want names like "path"
23 |  |  |  |  |  |  | # but the Prancer::Middleware::Session really wants "dir"
24 |  |  |  |  |  |  | # so rename it
25 | 0 |  |  |  |  |  | $config->{'dir'} = $path;
26 |  |  |  |  |  |  |
27 |  |  |  |  |  |  | # set the storage type to YAML
28 | 0 | 0 |  |  |  |  | my $self = bless($class->SUPER::new(%{$config || {}}), $class);
| 0 |  |  |  |  |  |
29 | 0 |  |  | 0 |  |  | $self->{'_serializer'} = sub { YAML::DumpFile(reverse(@_)) };
| 0 |  |  |  |  |  |
30 | 0 |  |  | 0 |  |  | $self->{'_deserializer'} = sub { YAML::LoadFile(@_) };
| 0 |  |  |  |  |  |
31 |  |  |  |  |  |  |
32 | 0 |  |  |  |  |  | logger->info("intialized session handler with YAML in ${path}");
33 | 0 |  |  |  |  |  | return $self;
34 | 0 |  |  |  |  |  | } catch {
35 | 0 | 0 |  |  |  |  | my $error = (defined($_) ? $_ : "unknown");
36 | 0 |  |  |  |  |  | logger->fatal("could not initialize sessions handler: ${error}");
37 | 0 |  |  |  |  |  | croak;
38 |  |  |  |  |  |  | };
39 |  |  |  |  |  |  | }
40 |  |  |  |  |  |  |
41 |  |  |  |  |  |  | 1;
42 |  |  |  |  |  |  |
43 |  |  |  |  |  |  | =head1 NAME
44 |  |  |  |  |  |  |
45 |  |  |  |  |  |  | Prancer::Session::Store::YAML
46 |  |  |  |  |  |  |
47 |  |  |  |  |  |  | =head1 SYNOPSIS
48 |  |  |  |  |  |  |
49 |  |  |  |  |  |  | This module implements a session handler based on YAML files. Sessions are
50 |  |  |  |  |  |  | stored at the configured path. This backend an perfectly be used in production
51 |  |  |  |  |  |  | environments, but two things should be kept in mind: The content of the session
52 |  |  |  |  |  |  | files is in plain text, and the session files should be purged by a cron job.
53 |  |  |  |  |  |  |
54 |  |  |  |  |  |  | To use this session handler, add this to your configuration file:
55 |  |  |  |  |  |  |
56 |  |  |  |  |  |  | session:
57 |  |  |  |  |  |  | store:
58 |  |  |  |  |  |  | driver: Prancer::Session::Store::YAML
59 |  |  |  |  |  |  | options:
60 |  |  |  |  |  |  | path: /tmp/prancer/sessions
61 |  |  |  |  |  |  |
62 |  |  |  |  |  |  | =head1 OPTIONS
63 |  |  |  |  |  |  |
64 |  |  |  |  |  |  | =over 4
65 |  |  |  |  |  |  |
66 |  |  |  |  |  |  | =item path
67 |  |  |  |  |  |  |
68 |  |  |  |  |  |  | B<REQUIRED> This indicates where sessions will be stored. If this path does not
69 |  |  |  |  |  |  | exist it will be created, if possible. This must be an absolute path and the
70 |  |  |  |  |  |  | destination must be writable by the same user that is running the application
71 |  |  |  |  |  |  | server. If this is not set your application will not start. If this is set to a
72 |  |  |  |  |  |  | path that your application cannot write to your application will not start. If
73 |  |  |  |  |  |  | this is set to a path that doesn't exist and the path can't be created your
74 |  |  |  |  |  |  | application will not start.
75 |  |  |  |  |  |  |
76 |  |  |  |  |  |  | =back
77 |  |  |  |  |  |  |
78 |  |  |  |  |  |  | =cut
79 |  |  |  |  |  |  |