summary refs log tree commit diff
path: root/lib/Net/HTTP/Console/Role/Plugins.pm
blob: 2bddccd45dd4d54306237f9a0ccf8328da3d89c7 (plain) (blame)
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 View/],
        }
    );

    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;