The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl -w
use strict;
use warnings;
use Moose ();
use Test::More tests => 1;;

package FooController;
use Railsish::Controller;
use Test::More;

sub bar {
    response->body( params("id") );
}

package main;
use Railsish::Router;

Railsish::Router->draw(
    sub {
        my ($map) = @_;
        $map->connect("/:controller/:action/:id");
        $map->connect("/:controller/:action");
        $map->connect("/:controller", action => 'index');
        $map->connect("", controller => "foo");
    }
);

use Railsish::Dispatcher;

use HTTP::Engine;
use HTTP::Request;

my $response = HTTP::Engine->new(
    interface => {
        module => "Test",
        request_handler => sub {
            Railsish::Dispatcher->dispatch(@_);
        }
    }
)->run(
    HTTP::Request->new(GET => "http://localhost/foo/bar/baz"),
    connection_info => { request_uri => "/foo/bar/baz" }
);

# The returned $response is a HTTP::Response object
is($response->content, "baz");