Router-Resource
view release on metacpan or search on metacpan
lib/Router/Resource.pm view on Meta::CPAN
groups => { default => [ qw(resource router missing GET POST PUT DELETE HEAD OPTIONS TRACE CONNECT PATCH) ] }
};
sub new {
my $class = shift;
bless { @_, routes => [] };
}
our (%METHS, $ROUTER);
sub router(&;@) {
my ($block, @settings) = @_;
local $ROUTER = __PACKAGE__->new(@settings);
$block->();
return $ROUTER;
}
sub resource ($&) {
my ($path, $code) = @_;
local %METHS = ();
$code->();
lib/Router/Resource.pm view on Meta::CPAN
my $methods = join(', ' => 'OPTIONS', keys %METHS);
$METHS{OPTIONS} = sub { [200, ['Allow', $methods], []] };
}
# Add the route.
push @{ $ROUTER->{routes} }, Router::Simple::Route->new(
$path, { meths => { %METHS } }
);
}
sub missing(&) { $ROUTER->{missing} = shift }
sub GET(&) { $METHS{GET} = shift }
sub HEAD(&) { $METHS{HEAD} = shift }
sub POST(&) { $METHS{POST} = shift }
sub PUT(&) { $METHS{PUT} = shift }
sub DELETE(&) { $METHS{DELETE} = shift }
sub OPTIONS(&) { $METHS{OPTIONS} = shift }
sub TRACE(&) { $METHS{TRACE} = shift }
sub CONNECT(&) { $METHS{CONNECT} = shift }
sub PATCH(&) { $METHS{PATCH} = shift }
sub dispatch {
my ($self, $env) = @_;
my $match = $self->match($env);
if (my $meth = $match->{meth}) {
return $meth->($env, $match->{data});
}
my $missing = $self->{missing} or return [
$match->{code}, $match->{headers}, [$match->{message}]
];
( run in 0.539 second using v1.01-cache-2.11-cpan-49f99fa48dc )