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.

