1 package Plack::Session::Store::CHI;
5 use Scalar::Util qw/blessed/;
7 use parent 'Plack::Session::Store';
9 use Plack::Util::Accessor qw[ chi ];
12 my ($class, %params) = @_;
13 unless ( blessed $params{chi} and $params{chi}->isa('CHI::Driver') ) {
14 die('require chi driver');
16 bless { %params } => $class;
20 my ($self, $session_id, $key) = @_;
21 my $cache = $self->chi->get($session_id);
23 return $cache->{ $key };
27 my ($self, $session_id, $key, $data) = @_;
28 my $cache = $self->chi->get($session_id);
30 $cache = {$key => $data};
33 $cache->{$key} = $data;
35 $self->chi->set($session_id => $cache);
39 my ($self, $session_id, $key) = @_;
40 my $cache = $self->chi->get($session_id);
41 return unless exists $cache->{$key};
43 delete $cache->{ $key };
44 $self->chi->set($session_id => $cache);
48 my ($self, $session_id) = @_;
49 $self->chi->remove($session_id);
58 Plack::Session::Store::CHI - CHI session store
63 use Plack::Session::Store::CHI;
67 return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
71 enable 'Session', store => Plack::Session::Store::CHI->new(chi => CHI->new(driver => 'FastMmap'));
79 =item B<new ( %params )>
85 =item B<fetch ( $session_id, $key )>
87 =item B<store ( $session_id, $key, $data )>
89 =item B<delete ( $session_id, $key )>
95 =item B<cleanup ( $session_id )>