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 )