Aion-Emitter
view release on metacpan or search on metacpan
lib/Aion/Emitter.pm view on Meta::CPAN
# ÐÑÑÑ Ðº ÑобÑаннÑм из анноÑаÑий меÑодам
has ini => (is => 'ro', isa => Str, default => INI);
# СпиÑок ÑлÑÑаÑелей
has event => (is => 'ro', isa => HashRef[ArrayRef[Dict[pkg => Str, sub => Str, line => Nat, nice => Option[Num], remark => Option[Str]]]], default => sub {
my ($self) = @_;
my %event = %{EVENT()};
if(defined $self->ini and -e $self->ini) {
open my $f, "<:utf8", $self->ini or die "Not open ${\$self->ini}";
while(<$f>) {
close($f), die "${\$self->ini}:$. corrupt!" unless /^([\w:]+)#(\w*),(\d+)=(?:(-?\d+(?:\.\d+)?)\s+)?([a-z][\w:]*(?:#[\w.:-]+)?)(?:\s+(.*?))??\s*$/i;
my ($pkg, $sub, $line, $nice, $evt, $remark) = ($1, $2, $3, $4, $5, $6);
push @{$event{$evt}}, {
pkg => $pkg,
sub => $sub,
line => $line,
$nice? (nice => $nice): (),
$remark ne ''? (remark => $remark): (),
};
lib/Aion/Emitter.pm view on Meta::CPAN
$listener->$sub($event);
}
$self
}
1;
__END__
=encoding utf-8
=head1 NAME
Aion::Emitter - event dispatcher
=head1 VERSION
0.1.0
=head1 SYNOPSIS
lib/Aion/Emitter/ListenersRun.pm view on Meta::CPAN
my $nicelen = max map length $_->{nice}, @listeners;
for my $listener_bag (@listeners) {
printcolor "#{blue}%+${nicelen}s#r #green%-${evtlen}s #{red}%-${actlen}s #{bold black}%s#r\n", @$listener_bag{qw/nice evt act remark/};
}
}
1;
__END__
=encoding utf-8
=head1 NAME
Aion::Emitter::ListenersRun - команда оÑобÑажаÑÑÐ°Ñ ÑпиÑок ÑлÑÑаÑелей
=head1 SYNOPSIS
Файл etc/annotation/eon.ann:
Aion::Emitter#new,1=Aion::Emitter
t/aion/emitter.t view on Meta::CPAN
use common::sense; use open qw/:std :utf8/; use Carp qw//; use Cwd qw//; use File::Basename qw//; use File::Find qw//; use File::Slurper qw//; use File::Spec qw//; use File::Path qw//; use Scalar::Util qw//; use Test::More 0.98; use String::Diff q...
# # NAME
#
# Aion::Emitter - диÑпеÑÑÐµÑ ÑобÑÑий
#
# # VERSION
#
# 0.1.0
#
# # SYNOPSIS
#
t/aion/emitter/listeners-run.t view on Meta::CPAN
use common::sense; use open qw/:std :utf8/; use Carp qw//; use Cwd qw//; use File::Basename qw//; use File::Find qw//; use File::Slurper qw//; use File::Spec qw//; use File::Path qw//; use Scalar::Util qw//; use Test::More 0.98; use String::Diff q...
#
# Aion::Emitter::ListenersRun - команда оÑобÑажаÑÑÐ°Ñ ÑпиÑок ÑлÑÑаÑелей
#
# # SYNOPSIS
#
# Файл etc/annotation/eon.ann:
#@> etc/annotation/eon.ann
#>> Aion::Emitter#new,1=Aion::Emitter
#@< EOF
#
( run in 0.711 second using v1.01-cache-2.11-cpan-e1769b4cff6 )