MojoX-Session-Store-File
view release on metacpan or search on metacpan
lib/MojoX/Session/Store/File.pm view on Meta::CPAN
package MojoX::Session::Store::File;
use strict;
use warnings;
use base 'MojoX::Session::Store';
use File::Spec;
use Carp qw(croak);
our $VERSION = '0.01';
__PACKAGE__->attr(dir => File::Spec->tmpdir);
__PACKAGE__->attr(prefix => 'mojoxsess');
__PACKAGE__->attr(driver => 'MojoX::Session::Store::File::Driver::Storable');
__PACKAGE__->attr('_driver_instance');
my $_driver_instance;
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
my $driver_classname = $self->driver;
unless($driver_classname =~ /^MojoX::Session::Store::File::Driver::/) {
$driver_classname = "MojoX::Session::Store::File::Driver::$driver_classname";
}
my $driver_available = eval "require $driver_classname; 1";
unless($driver_available) {
croak "Driver '$driver_classname' is not installed";
}
$_driver_instance ||= $driver_classname->new;
$self->_driver_instance($_driver_instance);
$self;
}
sub create {
my $self = shift;
my($sid, $expires, $data) = @_;
my $file = $self->_get_file_name($sid);
return if -e $file;
return $self->_driver_instance->freeze($file, [$expires, $data]);
}
sub update {
my $self = shift;
my($sid, $expires, $data) = @_;
my $file = $self->_get_file_name($sid);
return if not -e $file or not -w _;
$self->_driver_instance->freeze($file, [$expires, $data]);
}
sub load {
my $self = shift;
my $sid = shift;
my $file = $self->_get_file_name($sid);
return if not -e $file or not -r _;
@{$self->_driver_instance->thaw($file)};
}
sub delete {
my $self = shift;
my $sid = shift;
unlink $self->_get_file_name($sid);
}
sub _get_file_name {
my $self = shift;
my $sid = shift;
File::Spec->catfile($self->dir, sprintf('%s_%s', $self->prefix, $sid));
}
1;
__END__
=encoding utf8
=head1 NAME
MojoX::Session::Store::File - File store for MojoX::Session
=head1 SYNOPSIS
my $session = MojoX::Session->new(
store => MojoX::Session::Store::File->new,
);
=head1 ATTRIBUTES
L<MojoX::Session::Store::File> implemets the following attributes:
=head2 dir
Directory to store session files. Must be writable. Defaults to your OS temp directory.
( run in 0.503 second using v1.01-cache-2.11-cpan-9581c071862 )