MojoX-Session
view release on metacpan or search on metacpan
lib/MojoX/Session/Store/Dbic.pm view on Meta::CPAN
package MojoX::Session::Store::Dbic;
use strict;
use warnings;
use base 'MojoX::Session::Store';
use MIME::Base64;
use Storable qw/nfreeze thaw/;
__PACKAGE__->attr('resultset');
__PACKAGE__->attr(sid_column => 'sid');
__PACKAGE__->attr(expires_column => 'expires');
__PACKAGE__->attr(data_column => 'data');
sub create {
my ($self, $sid, $expires, $data) = @_;
$data = encode_base64(nfreeze($data)) if $data;
my $resultset = $self->resultset;
my $sid_column = $self->sid_column;
my $expires_column = $self->expires_column;
my $data_column = $self->data_column;
return $resultset->create(
{ $sid_column => $sid,
$expires_column => $expires,
$data_column => $data,
}
) ? 1 : 0;
}
sub update {
my ($self, $sid, $expires, $data) = @_;
$data = encode_base64(nfreeze($data)) if $data;
my $resultset = $self->resultset;
my $sid_column = $self->sid_column;
my $expires_column = $self->expires_column;
my $data_column = $self->data_column;
my $set = $resultset->search({$sid_column => $sid});
return $set->update(
{ $expires_column => $expires,
$data_column => $data,
}
) ? 1 : 0;
}
sub load {
my ($self, $sid) = @_;
my $resultset = $self->resultset;
my $sid_column = $self->sid_column;
my $expires_column = $self->expires_column;
my $data_column = $self->data_column;
my $row = $resultset->find({$sid_column => $sid});
return unless $row;
my $expires = $row->get_column($expires_column);
my $data = $row->get_column($data_column);
$data = thaw(decode_base64($data)) if $data;
return ($expires, $data);
}
sub delete {
my ($self, $sid) = @_;
my $resultset = $self->resultset;
my $sid_column = $self->sid_column;
return $resultset->search({$sid_column => $sid})->delete;
}
1;
__END__
=head1 NAME
MojoX::Session::Store::Dbic - DBIx::Class Store for MojoX::Session
=head1 SYNOPSIS
CREATE TABLE session (
sid VARCHAR(40) PRIMARY KEY,
data TEXT,
expires INTEGER UNSIGNED NOT NULL,
UNIQUE(sid)
);
( run in 1.228 second using v1.01-cache-2.11-cpan-39bf76dae61 )