refactor dispatch some more
[catagits/Web-Simple.git] / lib / Web / Dispatch / Wrapper.pm
CommitLineData
4ed4fb42 1package Web::Dispatch::Wrapper;
2
3use strictures 1;
5ba2eb68 4use Moo;
445b3ea0 5use Exporter 'import';
4ed4fb42 6
876e62e1 7our @EXPORT = qw(dispatch_wrapper redispatch_to response_filter);
445b3ea0 8
5ba2eb68 9extends 'Plack::Middleware';
10
11has 'wrapper' => (is => 'ro', required => 1);
12
445b3ea0 13sub dispatch_wrapper (&) {
876e62e1 14 my ($code) = @_;
15 __PACKAGE__->from_code($code);
16}
17
18sub from_code {
4ed4fb42 19 my ($class, $code) = @_;
5ba2eb68 20 $class->new(wrapper => $code);
4ed4fb42 21}
22
445b3ea0 23sub redispatch_to {
876e62e1 24 my ($new_path) = @_;
25 __PACKAGE__->from_code(sub {
445b3ea0 26 $_[1]->({ %{$_[0]}, PATH_INFO => $new_path });
27 });
28}
29
30sub response_filter (&) {
876e62e1 31 my ($code) = @_;
32 __PACKAGE__->from_code(sub {
445b3ea0 33 my @result = $_[1]->($_[0]);
34 if (@result) {
35 $code->(@result);
36 } else {
37 ()
38 }
39 });
40}
41
5ba2eb68 42sub to_app {
43 my $code = $_[0]->wrapper;
4ed4fb42 44 my $app = $_[1];
45 sub { $code->($_[0], $app) }
46}
47
481;