The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Cot - super lightweight perl framework based on Plack

SYNOPSIS

#!/usr/bin/env perl -w

use Cot;

get '/' => sub {
    my $self = shift;
    $self->res->status(200);
    $self->res->headers( { 'Content-Type' => 'text/plain', } );
    $self->res->body('Hello world!');
};

run;

The above is a basic but functional web app created with Cot.

DESCRIPTION

Cot is super lightweight perl framework base on Plack! you can extend Cot by using many plugins.

You can initialize application skelton using cotto utility executable.

% cot init Test
% cd ./Test
% cot run

METHODS

get

Receive GET request:

use Cot;

get '/api/echo' => sub {
    my $self = shift;
    #code
};

post

Receive POST request:

use Cot;

post '/api/echo' => sub {
    my $self = shift;
    #code
};

any

Receive any HTTP request:

use Cot;

any '/api/echo' => sub {
    my $self = shift;
    #code
};

static

Serve static files:

use Cot;

static => '/ui';

run

Up the Plack execution loop. You can set plackup arguments.

use Cot;

run("--port 5001 -R");

Context METHODS

req

req is a Plack::Request Object. You can call all methods of Plack::Request.

use Cot;

get '/test' => sub {
    my $self = shift;
    my $req = $self->req;
    my $test = $req->param('test');
};

res

res is a Plack::Response Object. You can call all methods of Plack::Response.

use Cot;

get '/test' => sub {
    my $self = shift;
    $self->res->status(200);
    $self->res->headers({'Content-Type' => 'text/plain' });
    $self->res->body($self->config->{sample});
};

path_info

path_info is PATH_INFO Array ref object.

use Cot;

# if called /test/hello
get '/test' => sub {
    my $self = shift;
    my $info = $self->path_info->[0]; #hello
    ...
};

env

env is Plack environment variable.

use Cot;

get '/test' => sub {
    my $self = shift;
    my $remote_addr = $self->env->{REMOTE_ADDR}; # same as $self->req->address
    ...
};

uri

uri is requested URI string

use Cot;

# if called /test/hello/myname
get '/test' => sub {
    my $self = shift;
    my $uri = $self->uri; # /test/hello/myname
    ...
};

ENV

You can set ENVIRONMENT variables for change behaviour.

COT_ROOT

Default value is ".". For example mod_perl configuration, you can set

PerlSetEnv COT_ROOT /www/TestApp/

COT_ENV

Default value is developement. You can change COT_ENV for configration.

#!/bin/sh
export COT_ENV=production
cot run

COT_DIRECTORYINDEX

Default value is none. If you use static method, automatically serve DIRECTORYINDEX

#!/bin/sh
export DIRECTORYINDEX=index.html:index.xhtml
cot run

PLUGINS

Cot has plaggable interface. For default install only Cot::Plugin::Config can be used.

config file($ENV{COT_ROOT}/config.yaml):

developement:
  hello: world

application code:

use Cot;
use Cot::Plugin qw/Config/;
# or use Cot::Plugin::Config;

get "/" => sub {
   my $self = shift;
   my $hello = $c->config->{'hello'}; # world
   ...
};

AUTHORS

This module has been written by Yusuke Shibata shibata@yusukeshibata.jp and others, see the AUTHORS file that comes with this distribution for details.

SOURCE CODE

The source code for this module is hosted on GitHub https://github.com/yusukeshibata/Cot. Feel free to fork the repository and submit pull requests!

DEPENDENCIES

The following modules are mandatory (Cot cannot run without them):

LICENSE

Copyright (C) Yusuke Shibata

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Yusuke Shibata shibata@yusukeshibata.jp