Commit | Line | Data |
632f0e07 |
1 | package App::SCS::Role::Plugin; |
2 | |
2f1cc197 |
3 | use Getopt::Long qw(GetOptionsFromArray); |
632f0e07 |
4 | use Moo::Role; |
5 | |
6 | with 'App::SCS::Role::WithConfig'; |
7 | |
8 | has app => ( |
9 | is => 'ro', weak_ref => 1, required => 1, |
10 | handles => [ 'pages' ], |
11 | ); |
12 | |
13 | sub page_plugins { () } |
14 | |
15 | sub default_page_plugins { () } |
16 | |
17 | sub page_dispatchers { () } |
18 | |
19 | sub provides_pages { () } |
20 | |
21 | sub register { return } |
22 | |
f50b4a35 |
23 | sub run_cli { |
24 | my ($self, $env) = @_; |
25 | my ($command, @argv) = @{$env->{argv}}; |
26 | return unless $command; |
2f1cc197 |
27 | return unless my $code = $self->can(my $meth = "run_command_${command}"); |
28 | my $run_env = { %$env }; |
29 | if (my $proto = prototype $code) { |
30 | my @spec = split ';', $proto; |
31 | my %opt; |
32 | GetOptionsFromArray(\@argv, \%opt, @spec); |
33 | $run_env->{options} = \%opt; |
34 | } |
35 | $run_env->{argv} = \@argv; |
36 | $self->$meth($run_env); |
f50b4a35 |
37 | return 1; |
38 | } |
39 | |
632f0e07 |
40 | 1; |