first cut at generation to file code
[scpubgit/App-SCS.git] / lib / App / SCS / Role / Plugin.pm
1 package App::SCS::Role::Plugin;
2
3 use Getopt::Long qw(GetOptionsFromArray);
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
23 sub run_cli {
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;
31     my %opt;
32     GetOptionsFromArray(\@argv, \%opt, @spec);
33     $run_env->{options} = \%opt;
34   }
35   $run_env->{argv} = \@argv;
36   $self->$meth($run_env);
37   return 1;
38 }
39
40 1;