File Coverage

blib/lib/Aion/Emitter/ListenersRun.pm
Criterion Covered Total %
statement 25 26 96.1
branch 3 4 75.0
condition n/a
subroutine 6 6 100.0
pod 1 1 100.0
total 35 37 94.5


line stmt bran cond sub pod time code
1             package Aion::Emitter::ListenersRun;
2             # Список слушателей
3              
4 1     1   222058 use common::sense;
  1         1  
  1         8  
5 1     1   59 use List::Util qw/pairmap max/;
  1         1  
  1         59  
6 1     1   4 use Aion::Format qw/printcolor/;
  1         1  
  1         41  
7              
8 1     1   444 use Aion;
  1         60196  
  1         6  
9              
10             with qw/Aion::Run/;
11              
12             # Маска для фильтра по командам
13             has mask => (is => 'ro', isa => Maybe[Str], arg => 1);
14              
15             # Эмиттер
16             has emitter => (is => 'ro', isa => 'Aion::Emitter', eon => 1);
17              
18             #@run emit:listeners „List of listeners”
19             sub list {
20 1     1 1 151606 my ($self) = @_;
21            
22 3 100       12 my @listeners = sort { $a->{evt} eq $b->{evt}? $a->{nice} <=> $b->{nice}: $a->{evt} cmp $b->{evt} }
23 2     2   5452 pairmap { my $evt = $a; map { +{ %$_, evt => $evt, act => $_->{act}, nice => 0+$_->{nice} } } @$b }
  2         3  
  3         15  
24 1         4 %{$self->emitter->event};
  1         40  
25            
26 1 50       19 @listeners = grep { /$self->{mask}/ } @listeners if $self->mask ne "";
  0         0  
27 1         387 my $evtlen = max map length $_->{evt}, @listeners;
28 1         5 my $actlen = max map length $_->{act}, @listeners;
29 1         7 my $nicelen = max map length $_->{nice}, @listeners;
30 1         2 for my $listener_bag (@listeners) {
31 3         287 printcolor "#{blue}%+${nicelen}s#r #green%-${evtlen}s #{red}%-${actlen}s #{bold black}%s#r\n", @$listener_bag{qw/nice evt act remark/};
32             }
33             }
34              
35             1;
36              
37             __END__