[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.3, Sat Jun 26 16:14:52 2010 UTC (14 years ago) by andrew
Branch: MAIN
Changes since 1.2: +9 -12 lines

use file existance to see if we support the action, oohh, more generic, nice!

#!/usr/bin/env perl

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

use Data::Dumper;

use 5.010;

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

        state %Actions;

        my $path  = app->home->rel_file( '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 { ( !exists $_->{$param} ) || $value ~~ $_->{$param} }
            @data;
    }
    $self->render_json( \@data );
};

app->start;
__DATA__

@@ index.html.ep
% layout 'default';
Please try /api/action

@@ 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>