File Coverage

blib/lib/DBIx/Class/QueryLog/Tee.pm
Criterion Covered Total %
statement 27 27 100.0
branch 7 8 87.5
condition n/a
subroutine 16 16 100.0
pod 3 11 27.2
total 53 62 85.4


line stmt bran cond sub pod time code
1             package DBIx::Class::QueryLog::Tee;
2             $DBIx::Class::QueryLog::Tee::VERSION = '0.001000';
3             # ABSTRACT: Log to multiple QueryLogs at a time
4              
5 1     1   53763 use Moo;
  1         16094  
  1         7  
6 1     1   1695 use warnings NONFATAL => 'all';
  1         2  
  1         34  
7              
8 1     1   4 use Sub::Name 'subname';
  1         3  
  1         112  
9              
10             my @methods = qw(
11             txn_begin txn_commit txn_rollback
12             svp_begin svp_release svp_rollback
13             query_start query_end
14             );
15             sub _valid_logger { !$_[0]->can($_) && return 0 for @methods; 1 }
16              
17 1     1   811 use namespace::clean;
  1         17763  
  1         6  
18              
19             has _loggers => (
20             is => 'ro',
21             isa => sub {
22             die "loggers has to be a hashref"
23             unless ref $_[0] && ref $_[0] eq 'HASH';
24             !_valid_logger($_[0]->{$_}) && die "\$loggers->{$_} does not point to a valid logger"
25             for keys %{$_[0]};
26             },
27             default => sub { {} },
28             init_arg => 'loggers',
29             );
30              
31             sub add_logger {
32 2     2 1 455 my ($self, $name, $logger) = @_;
33              
34 2 100       5 die "$name is not a valid logger" unless _valid_logger($logger);
35              
36 1 50       7 die "Logger $name is already in the list"
37             if $self->_loggers->{$name};
38              
39 1         5 $self->_loggers->{$name} = $logger
40             }
41              
42             sub remove_logger {
43 2     2 1 798 my ($self, $name) = @_;
44              
45 2 100       19 die "unknown logger $name" unless $self->_loggers->{$name};
46              
47 1         6 delete $self->_loggers->{$name}
48             }
49              
50             sub replace_logger {
51 3 100   3 1 2216 die "that is not a valid logger" unless _valid_logger($_[2]);
52              
53 2         11 $_[0]->_loggers->{$_[1]} = $_[2]
54             }
55              
56             for my $method (@methods) {
57 1     1   450 no strict 'refs';
  1         3  
  1         139  
58             *{$method} = subname $method => sub {
59 2     2 0 35 my $self = shift;
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
60              
61 2         3 $_->$method(@_) for
  2         20  
62             map $self->_loggers->{$_},
63             sort keys %{$self->_loggers};
64             };
65             }
66              
67             1;
68              
69             __END__