[BACK]Return to test_server.pl CVS log [TXT][DIR] Up to [local] / HOPE / Net-OpenAMD / script

File: [local] / HOPE / Net-OpenAMD / script / test_server.pl (download)

Revision 1.5, Sun Jun 27 00:52:33 2010 UTC (14 years ago) by andrew
Branch: MAIN
Changes since 1.4: +7 -6 lines

now my tests pass! except for the OAuth, it should actually pretty much be done. Next up, documentation!

#!/usr/bin/env perl

use Mojolicious::Lite;
use Mojo::JSON;

use 5.010;

app->renderer->add_helper(
    action => sub {
        my ( $self, $action ) = @_;

        state %Actions;

        my $path = app->home->rel_file( '../t/data/' . $action );

        return if !-e $path;
        my $mtime = ( stat _ )[9];

        $Actions{$action}{mtime} //= 0;

        if ( $mtime != $Actions{$action}{mtime} ) {
            open my $fh, $path or die "Couldn't open [$path]: $!";
            my $content = do { local $/; <$fh> };
            close $fh;

            my $json = Mojo::JSON->new;
            my $data = $json->decode($content);
            if ( $json->error ) {
                die $json->error;
            }

            $Actions{$action} = {
                mtime => $mtime,
                data  => $data,
            };
        }

        return $Actions{$action}{data};
    }
);

get '/' => 'index';

get '/api/:action' => sub {
    my $self = shift;

    my $data = $self->helper( 'action', $self->stash('action') );
    return if !ref $data;

    my @data = @{$data};
    foreach my $param ( $self->param ) {
        my $value = $self->param($param);
        @data = grep {
            ref $_ ne 'HASH'
                || ( !exists $_->{$param} )
                || $value ~~ $_->{$param}
        } @data;
    }
    $self->render_json( \@data );
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
Please try /api/action, or see
<a href="http://amd.home.net">amd.hope.net</a>.

@@ layouts/default.html.ep
<!doctype html><html>
    <head><title>Test OpenAMD API!</title></head>
    <body><%== content %></body>
</html>

@@ exception.html.ep
<!doctype html><html>
    <head><title>Exception</title></head>
    <body><%== $exception %></body>
</html>