Skip to content
'higher' level route and template handler for perl6
Other HTML
  1. Other 98.9%
  2. HTML 1.1%
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bin
lib
t
usage
.gitignore
.travis.yml
META6.json
README.md

README.md

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

  • Request is received
  • Hiker runs through all of the routes it found on startup
  • The routes are run through until a True (or a Promise whose result is True) value is returned
  • The template specified by the controller is rendered and the result is sent to the client

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

  • Allow for custom templating engines
  • Add a weight attribute to the routes so Regex order can be handled better
  • Whatever else the people crave
You can’t perform that action at this time.