X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FWeb%2FDispatch%2FWrapper.pm;h=f60a435958e23f03f6b7242e9f4a0ab17348ba5f;hb=445b3ea0af417a904ab7cfa9230e8257e91f82dc;hp=5ff60681a67ee5c0eb3a5036b5b72de394f1363c;hpb=8bd060f4f069c0aafac9d705540d4033b7c5cd19;p=catagits%2FWeb-Simple.git diff --git a/lib/Web/Dispatch/Wrapper.pm b/lib/Web/Dispatch/Wrapper.pm index 5ff6068..f60a435 100644 --- a/lib/Web/Dispatch/Wrapper.pm +++ b/lib/Web/Dispatch/Wrapper.pm @@ -1,12 +1,34 @@ package Web::Dispatch::Wrapper; use strictures 1; +use Exporter 'import'; -sub from_code { +our @EXPORT_OK = qw(dispatch_wrapper redispatch_to response_filter); + +sub dispatch_wrapper (&) { my ($class, $code) = @_; bless(\$code, $class); } +sub redispatch_to { + my ($class, $new_path) = @_; + $class->from_code(sub { + $_[1]->({ %{$_[0]}, PATH_INFO => $new_path }); + }); +} + +sub response_filter (&) { + my ($class, $code) = @_; + $class->from_code(sub { + my @result = $_[1]->($_[0]); + if (@result) { + $code->(@result); + } else { + () + } + }); +} + sub wrap { my $code = ${$_[0]}; my $app = $_[1];