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.001001';
3             # ABSTRACT: Log to multiple QueryLogs at a time
4              
5 1     1   26483 use Moo;
  1         8744  
  1         3  
6 1     1   997 use warnings NONFATAL => 'all';
  1         1  
  1         35  
7              
8 1     1   3 use Sub::Name 'subname';
  1         1  
  1         75  
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   429 use namespace::clean;
  1         6545  
  1         4  
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 280 my ($self, $name, $logger) = @_;
33              
34 2 100       4 die "$name is not a valid logger" unless _valid_logger($logger);
35              
36             die "Logger $name is already in the list"
37 1 50       6 if $self->_loggers->{$name};
38              
39 1         3 $self->_loggers->{$name} = $logger
40             }
41              
42             sub remove_logger {
43 2     2 1 417 my ($self, $name) = @_;
44              
45 2 100       14 die "unknown logger $name" unless $self->_loggers->{$name};
46              
47 1         12 delete $self->_loggers->{$name}
48             }
49              
50             sub replace_logger {
51 3 100   3 1 712 die "that is not a valid logger" unless _valid_logger($_[2]);
52              
53 2         7 $_[0]->_loggers->{$_[1]} = $_[2]
54             }
55              
56             for my $method (@methods) {
57 1     1   367 no strict 'refs';
  1         1  
  1         85  
58             *{$method} = subname $method => sub {
59 2     2 0 21 my $self = shift;
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
        2 0    
60              
61 2         4 $_->$method(@_) for
62             map $self->_loggers->{$_},
63 2         16 sort keys %{$self->_loggers};
64             };
65             }
66              
67             1;
68              
69             __END__