doc cleanup
[catagits/Web-Session.git] / lib / Plack / Session / Store / Cache.pm
CommitLineData
02e67ead 1package Plack::Session::Store::Cache;
2use strict;
3use warnings;
4
5use Scalar::Util qw/blessed/;
6
7use parent 'Plack::Session::Store';
8
9use Plack::Util::Accessor qw[ cache ];
10
11sub new {
12 my ($class, %params) = @_;
13
14 die('cache require get, set and remove method.')
15 unless blessed $params{cache}
16 && $params{cache}->can('get')
17 && $params{cache}->can('set')
18 && $params{cache}->can('remove');
19
20 bless { %params } => $class;
21}
22
23sub fetch {
24 my ($self, $session_id, $key) = @_;
25 my $cache = $self->cache->get($session_id);
26 return unless $cache;
27 return $cache->{ $key };
28}
29
30sub store {
31 my ($self, $session_id, $key, $data) = @_;
32 my $cache = $self->cache->get($session_id);
33 if ( !$cache ) {
34 $cache = {$key => $data};
35 }
36 else {
37 $cache->{$key} = $data;
38 }
39 $self->cache->set($session_id => $cache);
40}
41
42sub delete {
43 my ($self, $session_id, $key) = @_;
44 my $cache = $self->cache->get($session_id);
45 return unless exists $cache->{$key};
46
47 delete $cache->{ $key };
48 $self->cache->set($session_id => $cache);
49}
50
51sub cleanup {
52 my ($self, $session_id) = @_;
53 $self->cache->remove($session_id);
54}
55
561;
57
58__END__
59
60=pod
61
62=head1 NAME
63
64Plack::Session::Store::Cache - Cache session store
65
66=head1 SYNOPSIS
67
68 use Plack::Builder;
69 use Plack::Session::Store::Cache;
70 use CHI;
71
72 my $app = sub {
73 return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
74 };
75
76 builder {
77 enable 'Session',
78 store => Plack::Session::Store::Cache->new(
79 cache => CHI->new(driver => 'FastMmap')
80 );
81 $app;
82 };
83
84=head1 DESCRIPTION
85
7b024adb 86This will persist session data using any module which implements the
87L<Cache> interface. This offers a lot of flexibility due to the many
88excellent L<Cache>, L<Cache::Cache> and L<CHI> drivers available.
02e67ead 89
90This is a subclass of L<Plack::Session::Store> and implements
91it's full interface.
92
93=head1 METHODS
94
95=over 4
96
97=item B<new ( %params )>
98
7b024adb 99The constructor expects the I<cache> param to be an object instance
100which has the I<get>, I<set>, and I<remove> methods, it will throw an
101exception if that is not the case.
02e67ead 102
103=item B<cache>
104
7b024adb 105A simple accessor for the cache handle.
106
02e67ead 107=back
108
109=head1 BUGS
110
111All complex software has bugs lurking in it, and this module is no
112exception. If you find a bug please either email me, or add the bug
113to cpan-RT.
114
115=head1 AUTHOR
116
117Masahiro Chiba
118
119=cut