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.