1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
package Net::HTTP::Console::Role::Plugins;
use MooseX::Declare;
role Net::HTTP::Console::Role::Plugins {
use Try::Tiny;
has dispatchers => (
is => 'rw',
isa => 'ArrayRef[Str]',
traits => ['Array'],
lazy => 1,
auto_deref => 1,
default => sub {
[qw/Load HTTP Help Method Set/],
}
);
has plugins => (
traits => ['Array'],
is => 'rw',
isa => 'ArrayRef[Object]',
lazy => 1,
handles => {all_plugins => 'elements', add_plugin => 'push'},
default => sub {
my $self = shift;
my @p;
for ($self->dispatchers) {
my $p = "Net::HTTP::Console::Dispatcher::" . $_;
Class::MOP::load_class($p);
my $o = $p->new(application => $self);
push @p, $o;
}
\@p;
},
);
method dispatch ($input) {
my $result;
try {
foreach ($self->all_plugins) {
last if ($result = $_->dispatch($input));
}
}catch{
print "[ERROR]: ".$_;
};
}
}
1;
|