The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
package HTTPx::Dispatcher;
use strict;
use warnings;
use 5.00800;
our $VERSION = '0.10';
use HTTPx::Dispatcher::Rule;
use Scalar::Util qw/blessed/;
use Carp;
use base qw/Exporter/;

our @EXPORT = qw/connect match uri_for/;

my $rules;

sub connect {
    my $pkg  = caller(0);
    my @args = @_;

    push @{ $rules->{$pkg} }, HTTPx::Dispatcher::Rule->new(@args);
}

sub match {
    my ( $class, $req ) = @_;

    for my $rule ( @{ $rules->{$class} } ) {
        if ( my $result = $rule->match($req) ) {
            return $result;
        }
    }
    return;    # no match.
}

sub uri_for {
    my ( $class, @args ) = @_;

    for my $rule ( @{ $rules->{$class} } ) {
        if ( my $result = $rule->uri_for(@args) ) {
            return $result;
        }
    }
}

1;
__END__

=for stopwords TODO URI uri

=encoding utf8

=head1 NAME

HTTPx::Dispatcher - the uri dispatcher(DEPRECATED)

=head1 SYNOPSIS

    package Your::Dispatcher;
    use HTTPx::Dispatcher;

    connect ':controller/:action/:id';

    # in your *.psgi file
    use Plack::Request;
    use Your::Dispatcher;
    use UNIVERSAL::require;

    sub {
        my $req = Plack::Request->new($_[0]);
        my $rule = Your::Dispatcher->match($c->req);
        $rule->{controller}->use or die 'hoge';
        my $action = $rule->{action};
        $rule->{controller}->$action( $c->req );
    };

=head1 DESCRIPTION

THIS MODULE WAS NO LONGER MAINTAIN. USE L<Router::Simple> INSTEAD.

=head1 AUTHOR

Tokuhiro Matsuno E<lt>tokuhirom@gmail.comE<gt>

=head1 THANKS TO

lestrrat

masaki

=head1 SEE ALSO

L<Plack::Request>, L<HTTP::Engine>, L<Routes>

=head1 LICENSE

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

=cut