Egg-Plugin-SessionKit
view release on metacpan or search on metacpan
lib/Egg/Model/Session/Base/DBIC.pm view on Meta::CPAN
no strict 'refs'; ## no critic.
no warnings 'redefine';
if ($e->isa('Egg::Plugin::DBIC')) {
$e->is_model($s_label) || die qq{'$s_label' model is not found.};
my $s_name= $s_label=~m{^dbic\:+(.+)} ? $1: $s_label;
*{"${class}::_begin"}= sub {
&{"${project}::begin_$s_name"}($_[0]->e);
};
*{"${class}::_commit"}= sub {
&{"${project}::commit_ok"}($_[0]->e, $s_name, 1) if $_[1];
};
} else {
my $schema= $e->model($s_label)
|| die qq{'$s_label' model is not found.};
if ($schema->storage->dbh->{AutoCommit}) {
*{"${class}::_begin"} = sub { $_[0]->e->model($s_label) };
*{"${class}::_commit"}= sub { 1 };
} else {
*{"${class}::_begin"}= sub {
my $context= $_[0]->e->model($s_label);
$context->txn_begin;
$context;
};
*{"${class}::_commit"}= sub {
$_[1] ? $_[0]->_schema->txn_commit
: $_[0]->_schema->txn_rollback;
};
}
}
*{"${class}::moniker"}= sub {
$_[0]->attr->{dbic_moniker} ||= $_[0]->e->model($moniker);
};
*{"${class}::result"}= sub {
my $self= shift;
return ($self->attr->{result} || 0) unless @_;
$self->attr->{result}= shift;
};
*{"${class}::id_col"} = sub { $idcol };
*{"${class}::data_col"} = sub { $datacol };
*{"${class}::time_col"} = sub { $timecol };
$class->next::method($e);
}
sub restore {
my $self= shift;
my $id = shift || $self->session_id || croak q{I want session id.};
my $result = $self->moniker->find($id) || return 0;
my $datacol= $self->data_col;
\$self->result($result)->$datacol;
}
sub insert {
my $self= shift;
my $data= shift || croak q{I want session data.};
my $id = shift || $self->session_id || croak q{I want session id.};
# $self->result(undef) if $self->result;
$self->moniker->create({
$self->id_col => $id,
$self->data_col => $$data,
$self->time_col => localtime(time)->mysql_datetime,
});
}
sub update {
my $self= shift;
my $data= shift || croak q{I want session data.};
my $id = shift || $self->session_id || croak q{I want session id.};
return $self->insert($data, $id) unless $self->result;
my($datacol, $timecol)= ($self->data_col, $self->time_col);
$self->result->$timecol( localtime(time)->mysql_datetime );
$self->result->$datacol( $$data );
$self->result->update;
}
sub close {
my($self)= @_;
my $update_ok= $self->is_update;
$self->next::method;
$self->_commit($update_ok);
$self;
}
1;
__END__
=head1 NAME
Egg::Model::Session::Base::DBIC - Session management by DBIC.
=head1 SYNOPSIS
package MyApp::Model::Sesion;
__PACKAGE__->config(
dbic => {
label_schema => 'dbic_schma_label',
label_source => 'dbic_moniker_label',
id_field => 'id',
data_field => 'a_session',
time_field => 'lastmod',
},
);
__PACKAGE__->startup(
Base::DBIC
Store::Base64
ID::SHA1
Bind::Cookie
);
=head1 DESCRIPTION
The session data is preserved by using DBIC.
'L<Egg::Model::DBIC>' should be able to be used for use.
And, 'Base::DBIC' is added to startup of the component module generated with
L<Egg::Helper::Model::Session>. Base::FileCache of default's It is not possible
to cooperate and delete it, please.
Moreover, it is necessary to load Store system module to treat the session data
appropriately.
__PACKAGE__->startup(
( run in 1.140 second using v1.01-cache-2.11-cpan-39bf76dae61 )