NAME
Plack::ResponseHelper
SYNOPSIS
You can treat it as a micro-framework:
in app.psgi
use Plack::Request;
use Plack::ResponseHelper json => 'JSON',
text => 'Text';
my $app = sub {
my $env = shift;
my $form = Plack::Request->new($env)->parameters();
my $controller = ...;
respond $controller->($form);
};
somewhere in your controllers
sub my_controller {
...
return json => {status => 'ok', data => [1, 2, 3]};
}
# or
sub dummy_controller {
return text => "It works!";
}
Or if your app is even less sophisticated, just
use Plack::ResponseHelper text => 'Text';
sub {
respond text => 'Hello world!';
}
DESCRIPTION
A very thin layer that abstracts Plack's specifics.
Bundled with Plack::ResponseHelper::Attachment, Plack::ResponseHelper::JSON, Plack::ResponseHelper::Redirect, Plack::ResponseHelper::Text.
METHODS
use options
use Plack::ResponseHelper $type1 => $helper1, ...;
Here you declare your types, it means that you have to use these types in your calls to respond
.
$helper
is short helper's name, a plus sign can be used:
# will load Plack::ResponseHelper::JSON
use Plack::ResponseHelper json => 'JSON';
# will load Plack::ResponseHelper::My::Helper
use Plack::ResponseHelper my_helper => '+My::Helper';
respond
respond $type => $response;
respond
is always imported. Two arguments are required: the type of response and the response itself.
AUTHORING YOUR OWN HELPERS
Your module just has to contain a helper
function that returns a coderef for processing the response data structure that is passed to respond
.
For more complex helpers you may need to be able to customize their behaviour, this is achieved by passing an $init
parameter:
use Plack::ResponseHelper my_helper => ['My::Helper', $init];
$init
can be anything that PX::RH::My::Helper supports, e.g. a code ref that returns some dynamic data, or just a hashref with configuration options.
package Plack::ResponseHelper::My::Helper;
use strict;
use warnings;
sub helper {
my $init = shift;
my $content_type = $init && $init->{content_type} || 'text/plain';
return sub {
my $r = shift;
return [
200,
['Content-type' => $content_type],
['Hello world!']
];
};
}
1;
LICENSE
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.