NAME Routes::Tiny - Routes SYNOPSIS my $routes = Routes::Tiny->new; # Constraints $routes->add_route('/articles/:id', constraints => {id => qr/\d+/}); # Optional placeholders $routes->add_route('/archive/:year/(:month)?'); # Defaults $routes->add_route('/articles/:id', defaults => {controller => 'bar', action => 'foo'}); # Grouping (matches 'hello-bar') $routes->add_route('/(:foo)-bar'); # Globbing (matches 'photos/foo/bar/baz') $routes->add_route('/photos/*other'); # Path building $routes->add_route('/:foo/:bar', name => 'default'); $routes->build_path('default', foo => 'hello', bar => 'world'); # Matching my $match = $routes->match('/hello/world'); my $params_hashref = $match->params; # Matching with method my $match = $routes->match('/hello/world', method => 'GET'); DESCRIPTION Routes::Tiny is a lightweight routes implementation. Routes::Tiny aims to be easy to use in any web framework. FEATURES "Constraints" $routes->add_route('/articles/:id', constraints => {id => qr/\d+/}); $match = $routes->match('/articles/1'); # Routes::Tiny::Match object $match = $routes->match('/article/foo'); # undef It is possible to specify a constraint that a placeholder must match using a normal Perl regular expression. "Optional placeholders" $routes->add_route('/admin/:service(/:action)?', defaults => {action => 'list'}); my $match = $routes->match('/admin/foo'); # $m->params is {service => 'foo', action => 'list'} It is possible to specify an optional placeholder with a default value. "Grouping" $routes->add_route('/(:foo)-bar'); $match = $routes->match('/hello-bar'); # $match->params is {foo => 'hello'} It is possible to create a placeholder that doesn't occupy all the space between slashes. "Globbing" $routes->add_route('/photos/*other'); $routes->add_route('/books/*section/:title'); $routes->add_route('/*a/foo/*b'); $match = $routes->match('photos/foo/bar/baz'); # $match->params is {other => 'foo/bar/baz'} $match = $routes->match('books/some/section/last-words-a-memoir'); # $match->params is {section => 'some/section', title => 'last-words-a-memoir'} $match = $routes->match('zoo/woo/foo/bar/baz'); # $match->params is {a => 'zoo/woo', b => 'bar/baz'} It is possible to specify a globbing placeholder. "Path building" $routes->add_route('/articles/:id', name => 'article'); $path = $routes->build_path('article', id => 123); # $path is '/articles/123' It is possible to reconstruct a path from route's name and parameters. WARNINGS "Trailing slash issue" Trailing slash is important. Maybe this will be changed in the future. $routes->add_route('/articles'); # is different from $routes->add_route('/articles/'); METHODS "new" my $routes = Routes::Tiny->new; "add_route" $routes->add_route('/:service/:action'); Add a new route. "match" $routes->match('/hello/world'); Match against a path. "build_path" $pattern->build_path('name', {foo => 'bar'}); Build path from a given name and params. DEVELOPMENT Repository http://github.com/vti/routes-tiny CREDITS Sergey Zasenko (und3f) AUTHOR Viacheslav Tykhanovskyi, "vti@cpan.org". COPYRIGHT AND LICENSE Copyright (C) 2011, Viacheslav Tykhanovskyi This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.