Aniki
view release on metacpan or search on metacpan
lib/Aniki/Handler.pm view on Meta::CPAN
package Aniki::Handler;
use 5.014002;
use namespace::autoclean;
use Mouse;
use DBIx::Handler 0.12;
has connect_info => (
is => 'ro',
required => 1,
);
has on_connect_do => (
is => 'ro',
);
has on_disconnect_do => (
is => 'ro',
);
has trace_query => (
is => 'ro',
default => 0,
);
has trace_ignore_if => (
is => 'ro',
default => sub { \&_noop },
);
has handler => (
is => 'rw',
lazy => 1,
builder => 'connect',
clearer => 'disconnect',
);
sub _noop {}
sub connect :method {
my $self = shift;
my ($dsn, $user, $pass, $attr) = @{ $self->connect_info };
my $trace_ignore_if = $self->trace_ignore_if;
return $self->_handler_class->new($dsn, $user, $pass, $attr, {
on_connect_do => $self->on_connect_do,
on_disconnect_do => $self->on_disconnect_do,
trace_query => $self->trace_query,
trace_ignore_if => sub { $_[0]->isa('Aniki') || $_[0]->isa('Aniki::Handler') || $trace_ignore_if->(@_) },
});
}
sub _handler_class { 'DBIx::Handler' }
sub _proxy_methods { qw/dbh trace_query_set_comment run txn_manager txn in_txn txn_scope txn_begin txn_rollback txn_commit/ }
for my $name (__PACKAGE__->_proxy_methods) {
my $code = __PACKAGE__->_handler_class->can($name);
__PACKAGE__->meta->add_method($name => sub {
@_ = (shift->handler, @_);
goto $code;
});
}
sub DEMOLISH {
( run in 0.745 second using v1.01-cache-2.11-cpan-ceb78f64989 )