package HTTP::Session::Store::OnMemory;
use strict;
use warnings;
use base qw/Class::Accessor::Fast/;

__PACKAGE__->mk_ro_accessors(qw/data/);

sub new {
    my $class = shift;
    my %args = ref($_[0]) ? %{$_[0]} : @_;
    # set default values
    $args{data} ||= {};
    bless {%args}, $class;
}

sub select {
    my ( $self, $session_id ) = @_;
    Carp::croak "missing session_id" unless $session_id;
    $self->data->{$session_id};
}

sub insert {
    my ($self, $session_id, $data) = @_;
    Carp::croak "missing session_id" unless $session_id;
    $self->data->{$session_id} = $data;
}

sub update {
    my ($self, $session_id, $data) = @_;
    Carp::croak "missing session_id" unless $session_id;
    $self->data->{$session_id} = $data;
}

sub delete {
    my ($self, $session_id) = @_;
    Carp::croak "missing session_id" unless $session_id;
    delete $self->data->{$session_id};
}

sub cleanup { Carp::croak "This storage doesn't support cleanup" }

1;
__END__

=head1 NAME

HTTP::Session::Store::OnMemory - store session data on memory

=head1 SYNOPSIS

    HTTP::Session->new(
        store => HTTP::Session::Store::OnMemory->new(
            data => {
                foo => 'bar',
            }
        ),
        state => ...,
        request => ...,
    );

=head1 DESCRIPTION

store session data on memory for testing

=head1 CONFIGURATION

=over 4

=item data

session data.

=back

=head1 METHODS

=over 4

=item select

=item update

=item delete

=item insert

for internal use only

=back

=head1 SEE ALSO

L<HTTP::Session>