use strict;
use warnings;
-our $VERSION = '0.02';
+our $VERSION = '0.11';
our $AUTHORITY = 'cpan:STEVAN';
use Storable ();
}
sub fetch {
- my ($self, $session_id, $key) = @_;
- my $store = $self->_deserialize( $session_id );
- return unless exists $store->{ $key };
- return $store->{ $key };
-}
+ my ($self, $session_id) = @_;
-sub store {
- my ($self, $session_id, $key, $data) = @_;
- my $store = $self->_deserialize( $session_id );
- $store->{ $key } = $data;
- $self->_serialize( $session_id, $store );
+ my $file_path = $self->_get_session_file_path( $session_id );
+ return unless -f $file_path;
+
+ $self->deserializer->( $file_path );
}
-sub delete {
- my ($self, $session_id, $key) = @_;
- my $store = $self->_deserialize( $session_id );
- return unless exists $store->{ $key };
- delete $store->{ $key };
- $self->_serialize( $session_id, $store );
+sub store {
+ my ($self, $session_id, $session) = @_;
+ my $file_path = $self->_get_session_file_path( $session_id );
+ $self->serializer->( $session, $file_path );
}
-sub cleanup {
+sub remove {
my ($self, $session_id) = @_;
unlink $self->_get_session_file_path( $session_id );
}
$self->dir . '/' . $session_id;
}
-sub _serialize {
- my ($self, $session_id, $value) = @_;
- my $file_path = $self->_get_session_file_path( $session_id );
- $self->serializer->( $value, $file_path );
-}
-
-sub _deserialize {
- my ($self, $session_id) = @_;
- my $file_path = $self->_get_session_file_path( $session_id );
- $self->_serialize( $session_id, {} ) unless -f $file_path;
- $self->deserializer->( $file_path );
-}
-
-sub dump_session {
- my ($self, $session_id) = @_;
- my $file_path = $self->_get_session_file_path( $session_id );
- return {} unless -f $file_path;
- $self->deserializer->( $file_path );
-}
-
-
1;
__END__
This implements a basic file based storage for session data. By
default it will use L<Storable> to serialize and deserialize the
-data, but this can be configured easily.
+data, but this can be configured easily.
This is a subclass of L<Plack::Session::Store> and implements
-it's full interface.
+its full interface.
=head1 METHODS
=item B<serializer>
-This is a CORE reference that implements the serialization logic.
+This is a CODE reference that implements the serialization logic.
The CODE ref gets two arguments, the C<$value>, which is a HASH
reference to be serialized, and the C<$file_path> to save it to.
It is not expected to return anything.
=item B<deserializer>
-This is a CORE reference that implements the deserialization logic.
+This is a CODE reference that implements the deserialization logic.
The CODE ref gets one argument, the C<$file_path> to load the data
from. It is expected to return a HASH reference.
=head1 COPYRIGHT AND LICENSE
-Copyright 2009 Infinity Interactive, Inc.
+Copyright 2009, 2010 Infinity Interactive, Inc.
L<http://www.iinteractive.com>