Skip to content

moznion/p6-Router-Boost

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
t
 
 
 
 
 
 
 
 
 
 
 
 

Build Status

NAME

Router::Boost - Routing engine for perl6

SYNOPSIS

use Router::Boost;

my $router = Router::Boost.new();
$router.add('/',                             'dispatch_root');
$router.add('/entrylist',                    'dispatch_entrylist');
$router.add('/:user',                        'dispatch_user');
$router.add('/:user/{year}',                 'dispatch_year');
$router.add('/:user/{year}/{month:\d ** 2}', 'dispatch_month');
$router.add('/download/*',                   'dispatch_download');

my $dest = $router.match('/john/2015/10');
# => {:captured(${:month("10"), :user("john"), :year("2015")}), :stuff("dispatch_month")}

my $dest = $router.match('/access/to/not/existed/path');
# => {}

DESCRIPTION

Router::Boost is a routing engine for perl6. This router pre-compiles a regex for each routes thus fast.

This library is a perl6 port of Router::Boom of perl5.

METHODS

add(Router::Boost:D: Str $path, Any $stuff)

Add a new route.

$path is the path string.

$stuff is the destination path data. Any data is OK.

match(Router::Boost:D: Str $path)

Match the route. If matching is succeeded, this method returns hash like so;

{
    stuff    => 'stuff', # matched stuff
    captured => {},      # captured values
}

And if matching is failed, this method returns empty hash;

HOW TO WRITE A ROUTING RULE

plain string

$router.add('/foo', { controller => 'Root', action => 'foo' });
...
$router.match('/foo');
# => {:captured(${}), :stuff(${:action("foo"), :controller("Root")})}

:name notation

$router.add('/wiki/:page', { controller => 'WikiPage', action => 'show' });
...
$router.match('/wiki/john');
# => {:captured(${:page("john")}), :stuff(${:action("show"), :controller("WikiPage")})}

':name' notation matches rx{(<-[/]>+)}. You will get captured arguments by name key.

'*' notation

$router.add('/download/*', { controller => 'Download', action => 'file' });
...
$router.match('/download/path/to/file.xml');
# => {:captured(${"*" => "path/to/file.xml"}), :stuff(${:action("file"), :controller("Download")})}

'*' notation matches rx{(<-[/]>+)}. You will get the captured argument as the special key: *.

'{...}' notation

$router.add('/blog/{year}', { controller => 'Blog', action => 'yearly' });
...
$router.match('/blog/2010');
# => {:captured(${:year("2010")}), :stuff(${:action("yearly"), :controller("Blog")})}

'{...}' notation matches rx{(<-[/]>+)}, and it will be captured.

'{...:<[0..9]>+}' notation

$router.add('/blog/{year:<[0..9]>+}/{month:<[0..9]> ** 2}', { controller => 'Blog', action => 'monthly' });
...
$router.match('/blog/2010/04');
# => {:captured(${:month("04"), :year("2010")}), :stuff(${:action("monthly"), :controller("Blog")})}

You can specify perl6 regular expressions in named captures.

Note. You can't include normal capture in custom regular expression. i.e. You can't use {year:(\d+)} . But you can use {year:[\d+]} .

SEE ALSO

Router::Boom of perl5

COPYRIGHT AND LICENSE

Copyright 2015 moznion <moznion@gmail.com>

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

And original perl5's Router::Boom is

Copyright (C) tokuhirom.

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

AUTHOR

moznion moznion@gmail.com

About

Routing engine for perl6

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Other 100.0%