first cut at generation to file code
[scpubgit/App-SCS.git] / lib / App / SCS / Role / Plugin.pm
CommitLineData
632f0e07 1package App::SCS::Role::Plugin;
2
2f1cc197 3use Getopt::Long qw(GetOptionsFromArray);
632f0e07 4use Moo::Role;
5
6with 'App::SCS::Role::WithConfig';
7
8has app => (
9 is => 'ro', weak_ref => 1, required => 1,
10 handles => [ 'pages' ],
11);
12
13sub page_plugins { () }
14
15sub default_page_plugins { () }
16
17sub page_dispatchers { () }
18
19sub provides_pages { () }
20
21sub register { return }
22
f50b4a35 23sub 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 401;