SYNOPSIS

    package MyApp::Dispatcher;
    use Path::Dispatcher::Declarative -base;

    on score => sub { show_score() };

    on ['wield', qr/^\w+$/] => sub { wield_weapon($2) };

    rewrite qr/^inv/ => "display inventory";

    under display => sub {
        on inventory => sub { show_inventory() };
        on score     => sub { show_score() };
    };

    package Interpreter;
    MyApp::Dispatcher->run($input);

DESCRIPTION

Jifty::Dispatcher rocks!

KEYWORDS

dispatcher -> Dispatcher

Returns the Path::Dispatcher object for this class; the object that the sugar is modifying. This is useful for adding custom rules through the regular \s-1API\s0, and inspection.

dispatch path -> Dispatch

Invokes the dispatcher on the given path and returns a Path::Dispatcher::Dispatch object. Acts as a keyword within the same package; otherwise as a method (since these declarative dispatchers are supposed to be used by other packages).

run path, args

Performs a dispatch then invokes the \*(L"run\*(R" in Path::Dispatcher::Dispatch method on it.

on path => sub {}

Adds a rule to the dispatcher for the given path. The path may be:

a string

This is taken to mean a single token; creates an Path::Dispatcher::Rule::Tokens rule.

an array reference

This is creates a Path::Dispatcher::Rule::Tokens rule.

a regular expression

This is creates a Path::Dispatcher::Rule::Regex rule.

a code reference

This is creates a Path::Dispatcher::Rule::CodeRef rule.

under path => sub {}

Creates a Path::Dispatcher::Rule::Under rule. The contents of the coderef should be nothing other \*(L"on\*(R" and \*(C`under\*(C' calls.

then sub { }

Creates a Path::Dispatcher::Rule::Always rule that will continue on to the next rule via \*(C`next_rule\*(C'

The only argument is a coderef that processes normally (like on).

\s-1NOTE:\s0 You *can* avoid running a following rule by using \*(C`last_rule\*(C'.

An example:

under show => sub { then { print "Displaying "; }; on inventory => sub { print "inventory:\n"; ... }; on score => sub { print "score:\n"; ... };

AUTHOR

Shawn M Moore, \*(C`<sartak at bestpractical.com>\*(C'

BUGS

Please report any bugs or feature requests to \*(C`bug-path-dispatcher-declarative at rt.cpan.org\*(C', or through the web interface at <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Path-Dispatcher-Declarative>.

COPYRIGHT & LICENSE

Copyright 2008-2010 Best Practical Solutions.

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