Commit | Line | Data |
---|---|---|
4ed4fb42 | 1 | package Web::Dispatch::Wrapper; |
2 | ||
3 | use strictures 1; | |
5ba2eb68 | 4 | use Moo; |
445b3ea0 | 5 | use Exporter 'import'; |
4ed4fb42 | 6 | |
876e62e1 | 7 | our @EXPORT = qw(dispatch_wrapper redispatch_to response_filter); |
445b3ea0 | 8 | |
5ba2eb68 | 9 | extends 'Plack::Middleware'; |
10 | ||
11 | has 'wrapper' => (is => 'ro', required => 1); | |
12 | ||
445b3ea0 | 13 | sub dispatch_wrapper (&) { |
876e62e1 | 14 | my ($code) = @_; |
15 | __PACKAGE__->from_code($code); | |
16 | } | |
17 | ||
18 | sub from_code { | |
4ed4fb42 | 19 | my ($class, $code) = @_; |
5ba2eb68 | 20 | $class->new(wrapper => $code); |
4ed4fb42 | 21 | } |
22 | ||
445b3ea0 | 23 | sub redispatch_to { |
876e62e1 | 24 | my ($new_path) = @_; |
25 | __PACKAGE__->from_code(sub { | |
445b3ea0 | 26 | $_[1]->({ %{$_[0]}, PATH_INFO => $new_path }); |
27 | }); | |
28 | } | |
29 | ||
30 | sub 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 | 42 | sub to_app { |
43 | my $code = $_[0]->wrapper; | |
4ed4fb42 | 44 | my $app = $_[1]; |
45 | sub { $code->($_[0], $app) } | |
46 | } | |
47 | ||
48 | 1; |