Sleep::Routes - From URI to classname.


Sleep documentation Contained in the Sleep distribution.

Index


Code Index:

NAME

Top

Sleep::Routes - From URI to classname.

SYNOPSYS

Top

    my $routes = Sleep::Routes->new([
        { 
            route => qr{/question(?:/(\d+))?$},
            class => 'QA::Question' 
        },
        { 
            route => qr{/question/(\d+)/comments$},
            class => 'QA::Comment' 
        },
    ]);

DESCRIPTION

Top

CLASS METHODS

Top

Sleep::Routes->new([ ROUTES ])

A route should contain at least two entries: route and class. The route is a regular expression which will be matched to an URL. The class should the name of a subclass of Sleep::Resource which will work with the arguments.

METHODS

Top

SELF->resource(URL)

Returns the first route that matched and the variables from the URL that were parsed from it.

SELF->parse_url(URL)

Does the actual check of URL described in resource

BUGS

Top

If you find a bug, please let the author know.

COPYRIGHT

Top

AUTHOR

Top

Peter Stuifzand <peter@stuifzand.eu>


Sleep documentation Contained in the Sleep distribution.

package Sleep::Routes;

use strict;
use warnings;

sub new {
    my $klass  = shift;
    my $routes = shift;

    die "Not an ARRAY" unless ref($routes) eq 'ARRAY';

    my $self = bless {
        routes => $routes,
    }, $klass;

    return $self;
}


sub parse_url {
    my $self = shift;
    my $url  = shift;

    for (@{$self->{routes}}) {
        if (my (@vars) = $url =~ m/$_->{route}/) {
            return ($_, @vars);
        }
    }

    return;
}

sub resource {
    my $self = shift;
    my $url  = shift;

    my ($route, @vars) = $self->parse_url($url);
    return ($route, @vars);
}

1;

__END__