NAME

Pinwheel::Mapper

SYNOPSIS

use Pinwheel::Mapper;
my $mapper = Pinwheel::Mapper->new();

# TODO, add a meaningful synopsis

DESCRIPTION

Handles the routing functionality.

ROUTINES

Mapper->new()

Constructor method. Creates an empty mapper.

$mapper->reset()

Empties the mapper.

$mapper->connect([NAME,] PATH, OPTIONS)

TODO, document me.

The PATH is tidied.

'defaults' is removed from OPTIONS and kept (default: {})

'requirements' is removed from OPTIONS and kept (default: {})

If PATH is absolute (^\w+://) then the '_static=1' is added to OPTIONS.

target = {}

defaults are merged in from OPTIONS except for keys that begin with "_". (Special keys seem to be: _static _base _filter).

Big scary regex parser replacement thing:

 find
       optional "/" or "." ("prefix")
       ":" or "*" (type)
       optional "("
       [a-z][a-z0-9_]* ("name")
       optional ")"

 push name onto matchkeys
 if name = "controller" or "action", set the appropriate 'target' to '*'
 if name "id", defaults{id}||=undef
 quotemeta prefix

 if type = "*":
       pattern = prefix."(.*)"
 elsif there is a "requirements" for name, use it (it's a regex):
       pattern = prefix."($requirement)"
 elsif prefix was "."
       pattern = prefix.'([^/.][^/]*)' # i.e. .repr is allowed to contain "."
 else
       pattern = prefix.'([^/.]+)' # i.e. /:foo is not allowed to contain "."

 make optional if a default exists for this name:
  (?:pattern)?

defaults{controller}||=content defaults{action}||=index

target{controller} ||= defaults{controller} target{action} ||= defaults{action}

Each value of 'requirements' is compiled into a regex: ^value$

Route hash is built.

Pushed to 'routes', unless _static (namely: absolute route, or _static=1 specifically passed in)

Stored in 'named', if a name was given.

$params = $mapper->match(PATH)

Finds the first route matching PATH. Routes are tried in the order they were added using $mapper->connect.

If a matching route is found, returns the parameters required. If no matching route is found, returns undef.

TODO, document how matching works.

TODO, document what "the parameters required" means.

$url = $mapper->generate([NAME, ]PARAMS)

Create a url for a mapped controller.

TODO, what does that even mean?

NAME is TODO. PARAMS is a list of name/value options.

_base controller action

requirements/defaults/regex

@names = @{ $mapper->names }

Returns the names of all named routes, sorted, as an array ref.

AUTHOR

A&M Network Publishing <DLAMNetPub@bbc.co.uk>