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 )