use parent 'Plack::Session::Store';
-use Plack::Util::Accessor qw[ dbh table_name serializer deserializer ];
+use Plack::Util::Accessor qw[ dbh get_dbh table_name serializer deserializer ];
sub new {
my ($class, %params) = @_;
- if (! $params{dbh} ) {
- die "DBI instance was not available in the argument list";
+ if (! $params{dbh} && ! $params{get_dbh}) {
+ die "DBI instance or a callback was not available in the argument list";
}
$params{table_name} ||= 'sessions';
}
sub _dbh {
- shift->{dbh};
+ my $self =shift;
+ ( exists $self->{get_dbh} ) ? $self->{get_dbh}->() : $self->{dbh};
}
sub fetch {
$app;
};
+ # set get_dbh callback for ondemand
+
+ builder {
+ enable 'Session',
+ store => Plack::Session::Store::DBI->new(
+ get_dbh => sub { DBI->connect( @connect_args ) }
+ );
+ $app;
+ };
+
# with custom serializer/deserializer
builder {
},
);
+t::lib::TestSession::run_all_tests(
+ store => Plack::Session::Store::DBI->new( get_dbh => sub { $dbh } ),
+ state => Plack::Session::State->new,
+ env_cb => sub {
+ open my $in, '<', \do { my $d };
+ my $env = {
+ 'psgi.version' => [ 1, 0 ],
+ 'psgi.input' => $in,
+ 'psgi.errors' => *STDERR,
+ 'psgi.url_scheme' => 'http',
+ SERVER_PORT => 80,
+ REQUEST_METHOD => 'GET',
+ QUERY_STRING => join "&" => map { $_ . "=" . $_[0]->{ $_ } } keys %{$_[0] || +{}},
+ };
+ },
+);
+
+
$dbh->disconnect;
-done_testing;
\ No newline at end of file
+done_testing;