5759c5f451ff2b8bc0356f2cc86aa678b65010fe
[scpubgit/App-SCS.git] / lib / App / SCS / Plugin / Server.pm
1 package App::SCS::Plugin::Server;
2
3 use Module::Runtime qw(use_module);
4 use Moo;
5 no warnings::illegalproto;
6
7 with 'App::SCS::Role::Plugin';
8
9 has _static_handler => (is => 'lazy');
10
11 sub _build__static_handler {
12   my ($self) = @_;
13   use_module('Plack::App::File')->new(
14     root => $self->app->share_dir->catdir('static')
15   );
16 }
17
18 sub page_dispatchers {
19   my ($self) = @_;
20   sub (/**.*) {
21     my $path = $_[1];
22     return unless $path =~ s/(?=\/|^)-//;
23     App::SCS::Web::redispatch_to("/static/${path}");
24   },
25   sub (/static/...) { $self->_static_handler },
26   sub (/favicon + .ico) { $self->_static_handler },
27 }
28
29 sub run_command_server {
30   my ($self, $env) = @_;
31   my @args = @{$env->{argv}};
32   my $r = use_module('Plack::Runner')->new(
33     server => 'Starman',
34     app => $self->app->web->to_psgi_app
35   );
36   $r->parse_options(@args);
37   $r->set_options(argv => \@args);
38   $r->run;
39 }
40
41 1;