User:Exor674/RoutingExamplePages

From Dreamwidth Notes
< User:Exor674
Revision as of 02:55, 5 November 2009 by Exor674 (Talk | contribs)

Jump to: navigation, search

Not using a template -- Data Page

package DW::Controller::MOO;
use strict;
use warnings;
use DW::Routing;
use DW::Request;
use JSON;
 
DW::Routing->register_string(  "/moo", \&handler );
 
sub handler {
    my $r = DW::Request->get;
 
    $response = {
        time => time,
        cute => ["kittens", "puppies"],
        string => "Kittens and puppies are cute",
    };
 
    my $formats = {
        'json' => [ "application/json", sub { $_[0]->print(objToJson( $_[1] )); } ],
        'text' => [ "text/plain" sub { $_[0]->print( $_[1]->string )) } ],
    };
 
    my $format = $formats->{ $_[0]->format || 'json' };
 
    return $r->NOT_FOUND if ( ! $format );
 
    $r->content_type( $format->[0] ) if $format->[0];
 
    $format->[1]->( $r, $response );
 
    return $r->OK;
}
 
1;

Not using a template -- Data Page with caching

package DW::Controller::SlowMOO;
use strict;
use warnings;
use DW::Routing;
use DW::Request;
use DW::FragmentCache;
use JSON;
 
DW::Routing->register_string(  "/slow_moo", \&handler );
 
sub handler {
    my $r = DW::Request->get;
 
    $get_response = sub {
        sleep 5;
        return {
            time => time,
            cute => ["kittens", "puppies"],
            string => "Kittens and puppies are cute",
        };
    };
 
    my $formats = {
        'json' => [ "application/json", sub {
            $_[0]->print( DW::FragmentCache->get( "slowmoo:json", {
                render => sub { return objToJson( $get_response->( $_[0]) ); }
            }, {} ));
        } ],
        'text' => [ "text/plain", sub {
            $_[0]->print( DW::FragmentCache->get( "slowmoo:json", {
                render => sub { return $get_response->( $_[0] )->{string}; }
            }, {} ));
        } ],
    };
 
    my $format = $formats->{ $_[0]->format || 'json' };
 
    return $r->NOT_FOUND if ( ! $format );
 
    $r->content_type( $format->[0] ) if $format->[0];
 
    $format->[1]->( $r );
 
    return $r->OK;
}
 
1;