[Warszawa-pm] Plack

Zbigniew Lukasiak zzbbyy w gmail.com
Pią, 27 Lis 2009, 03:53:07 PST


2009/11/27 piotr pogorzelski <pp w webtel.pl>:
>>
>> Ja sobie dzisiaj napisałem coś takiego:
>>
> dzieki, popatrze sobie przez weekend.
> chyba za dlugo robilem pod HTML::Mason i jakos TT srednio lubie ;)

Spoko - to właśnie o to chodzi, że to to akurat łatwo sobie podmienić.

Następny eksperyment:

###  Framework ###

package PicoFramework;
use Moose;
use Template;
use Plack::Request;
use Scalar::Util qw(blessed);

has renderer => ( is => 'ro' );
has controller => ( is => 'ro' );

sub handler {
    my $self = shift;

    sub {
        my $req = Plack::Request->new(shift);
        my (undef, $action_name, @args) = split /\//, $req->path;
        my $res;
        if ( my $action = $self->controller->can( "serve_$action_name" ) ){
            my $out = &$action( @args );
            if( blessed $out and $out->isa( 'Plack::Response' ) ){
                $res = $out;
            }
            else{
                $res = $req->new_response(200);
                $res->content_type('text/html');
                $res->body( $out );
            }
        }
        else{
            $res = $req->new_response(404);
            $res->content_type('text/plain');
            $res->body( 'No such page' );
        }
        return $res->finalize;
    };
}


### Application ###

package MyController;

sub serve_aaa {
    my( @args ) = @_;
    return "aaa: @args";
}

sub serve_bbb {
    my( @args ) = @_;
    return "bbb: @args";
}

package main;

my $app = PicoFramework->new( controller => 'MyController' );

$app->handler();


Każda metoda w MyController która zaczyna się od 'serve_' jest
interpretowana jako handle.  Może ona zwracać albo tylko HTML (jako
string) albo Plack::Response (wtedy może dodawać nagłówki itp).


To oczywiście są takie wprawki, ale widać, że Plack załatwia te
wszystkie upierdliwe rzeczy, a resztę już można naprawdę dowolnie
sobie dokładać, nie tak jak w Catalyscie gdzie te wszystkie trudne
rzeczy też są załatwione ale wymusza on też w jaki sposób programować
całą resztę.  Oczywiście w tej całej reszcie też są rzeczy które
fajnie byłoby mieć załatwione - ale lepiej mieć takie otwarte pole niż
tak przekomplikowane jak Catalyscie.

Z.


Więcej informacji o liście Warszawa-pm