1 package App::SCS::Role::Plugin;
3 use Getopt::Long qw(GetOptionsFromArray);
6 with 'App::SCS::Role::WithConfig';
9 is => 'ro', weak_ref => 1, required => 1,
10 handles => [ 'pages' ],
13 sub page_plugins { () }
15 sub default_page_plugins { () }
17 sub page_dispatchers { () }
19 sub provides_pages { () }
21 sub register { return }
24 my ($self, $env) = @_;
25 my ($command, @argv) = @{$env->{argv}};
26 return unless $command;
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;
32 GetOptionsFromArray(\@argv, \%opt, @spec);
33 $run_env->{options} = \%opt;
35 $run_env->{argv} = \@argv;
36 $self->$meth($run_env);