Q::hooks(), accept a hook name argument
and return a useful result
This commit is contained in:
parent
4f3ff19d1a
commit
d5481df3dd
@ -43,7 +43,14 @@ sub version { $VERSION . ($git ? "/$git" : "") }
|
|||||||
|
|
||||||
sub TRACE_LEVEL { $TraceLevel }; # leave for plugin compatibility
|
sub TRACE_LEVEL { $TraceLevel }; # leave for plugin compatibility
|
||||||
|
|
||||||
sub hooks { $hooks; }
|
sub hooks {
|
||||||
|
my ($self, $hook) = @_;
|
||||||
|
if ($hook) {
|
||||||
|
if (!defined $hooks->{$hook}) { return wantarray ? () : []; };
|
||||||
|
return wantarray ? @{$hooks->{$hook}} : $hooks->{$hook};
|
||||||
|
};
|
||||||
|
return $hooks;
|
||||||
|
}
|
||||||
|
|
||||||
sub load_logging {
|
sub load_logging {
|
||||||
my $self = shift;
|
my $self = shift;
|
||||||
@ -252,9 +259,7 @@ sub transaction { return {}; } # base class implements empty transaction
|
|||||||
|
|
||||||
sub run_hooks {
|
sub run_hooks {
|
||||||
my ($self, $hook) = (shift, shift);
|
my ($self, $hook) = (shift, shift);
|
||||||
if ($hooks->{$hook}) {
|
if (my @local_hooks = $self->hooks($hook)) {
|
||||||
my @r;
|
|
||||||
my @local_hooks = @{$hooks->{$hook}};
|
|
||||||
$self->{_continuation} = [$hook, [@_], @local_hooks];
|
$self->{_continuation} = [$hook, [@_], @local_hooks];
|
||||||
return $self->run_continuation();
|
return $self->run_continuation();
|
||||||
}
|
}
|
||||||
@ -265,7 +270,7 @@ sub run_hooks_no_respond {
|
|||||||
my ($self, $hook) = (shift, shift);
|
my ($self, $hook) = (shift, shift);
|
||||||
if ($hooks->{$hook}) {
|
if ($hooks->{$hook}) {
|
||||||
my @r;
|
my @r;
|
||||||
for my $code (@{$hooks->{$hook}}) {
|
for my $code ($self->hooks($hook)) {
|
||||||
eval { (@r) = $code->{code}->($self, $self->transaction, @_); };
|
eval { (@r) = $code->{code}->($self, $self->transaction, @_); };
|
||||||
if ($@) {
|
if ($@) {
|
||||||
warn("FATAL PLUGIN ERROR [" . $code->{name} . "]: ", $@);
|
warn("FATAL PLUGIN ERROR [" . $code->{name} . "]: ", $@);
|
||||||
|
25
t/qpsmtpd.t
25
t/qpsmtpd.t
@ -19,10 +19,10 @@ BEGIN {
|
|||||||
my $qp = bless {}, 'Qpsmtpd';
|
my $qp = bless {}, 'Qpsmtpd';
|
||||||
|
|
||||||
ok($qp->version(), "version, " . $qp->version());
|
ok($qp->version(), "version, " . $qp->version());
|
||||||
is_deeply(Qpsmtpd::hooks(), {}, 'hooks, empty');
|
__hooks_none();
|
||||||
|
|
||||||
ok(my ($smtpd, $conn) = Test::Qpsmtpd->new_conn(), "get new connection");
|
ok(my ($smtpd, $conn) = Test::Qpsmtpd->new_conn(), "get new connection");
|
||||||
ok(Qpsmtpd::hooks(), "hooks, populated");
|
__hooks();
|
||||||
|
|
||||||
__temp_file();
|
__temp_file();
|
||||||
__temp_dir();
|
__temp_dir();
|
||||||
@ -40,6 +40,27 @@ __config();
|
|||||||
|
|
||||||
done_testing();
|
done_testing();
|
||||||
|
|
||||||
|
sub __hooks {
|
||||||
|
ok(Qpsmtpd::hooks(), "hooks, populated");
|
||||||
|
my $r = $qp->hooks;
|
||||||
|
ok(%$r, "hooks, populated returns a hashref");
|
||||||
|
|
||||||
|
$r = $qp->hooks('connect');
|
||||||
|
ok(@$r, "hooks, populated, connect");
|
||||||
|
#warn Data::Dumper::Dumper($r);
|
||||||
|
|
||||||
|
my @r = $qp->hooks('connect');
|
||||||
|
ok(@r, "hooks, populated, connect, wants array");
|
||||||
|
}
|
||||||
|
|
||||||
|
sub __hooks_none {
|
||||||
|
is_deeply(Qpsmtpd::hooks(), {}, 'hooks, empty');
|
||||||
|
is_deeply($qp->hooks, {}, 'hooks, empty');
|
||||||
|
|
||||||
|
my $r = $qp->hooks('connect');
|
||||||
|
is_deeply($r, [], 'hooks, empty, specified');
|
||||||
|
}
|
||||||
|
|
||||||
sub __log {
|
sub __log {
|
||||||
my $warned = '';
|
my $warned = '';
|
||||||
local $SIG{__WARN__} = sub {
|
local $SIG{__WARN__} = sub {
|
||||||
|
Loading…
Reference in New Issue
Block a user