Raku Land

Hiker

hiker

Build Status

usage

use Hiker; my $app = Hiker.new( hikes => ['controllers', 'models'], templates => 'templates', ); $app.listen;

Pretty easy, right?

explain yourself

hikes => ['controllers', 'models'],

hikes are the directories where Hiker should look for any pm6|pl6 files and check for anything resembling a Hiker::Route|Hiker::Model. Since we all love organization, this parameter accepts an array so you can split your models and controllers.

The Hiker::Routes found in these directories are sorted by the type of path (Regex vs Str) and Strs without optional parameters (see HTTP::Server::Router) are given highest priority, then optional param strings, and then regexes.

templates => 'templates',

Hiker::Route a controller

This role lets Hiker know what this class does. Boilerplate class (controller) would look like the following:

use Hiker::Route; class MyApp::Basic does Hiker::Route { has $.path = '/'; # can also be a regex, eg: /.+/ has $.template = 'basic.mustache'; has $.model = 'MyApp::Model'; #this is an optional attribute method handler($req, $res) { True; } }

Note, returning the True value auto renders whatever the $.template is.

Hiker::Model a model

This role lets Hiker know what this class does. Boilerplate class (model) would look like the following:

use Hiker::Model; class MyApp::Model does Hiker::Model { method bind($req, $res) { $res.data<data> = qw<do some db or whatever stuff here>; } }

Boilerplate

# hiker init

This will create a boilerplate application for you in the current directory

Run the webapp

# perl6 app.pl6

This will run your webapp in localhost:8080

Request Flow

Templates

Hiker uses Template::Mustache. If the .template specified by the route doesn't exist then a default 404 message is shown to the user.

For the time being this isn't configurable

Stuff to do