1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
package Plack::Middleware::MethodOverride;
use strict;
use warnings;
use parent qw(Plack::Middleware);
use Plack::Util::Accessor qw( header );
my %allowed_method = map { $_ => 1 } qw( GET HEAD POST PUT DELETE );
sub call {
my $self = shift;
my $env = shift;
my $key = $self->header || 'X-HTTP-Method-Override';
$key =~ tr/-/_/;
my $method = $env->{"HTTP_" . uc($key)};
if (defined $method && $allowed_method{$method}) {
$env->{REQUEST_METHOD} = $method;
}
$self->app->($env);
}
1;
__END__
=head1 NAME
Plack::Middleware::MethodOverride - Overrides HTTP method with X-HTTP-Method-Override header
=head1 SYNOPSIS
use Plack::Builder;
builder {
enable "Plack::Middleware::MethodOverride";
$handler;
};
=head1 DESCRIPTION
Plack::Middleware::MethodOverride allows your application to override
HTTP request method with the value specified in HTTP header value.
=head1 CONFIGURATIONS
=over 4
=item header
enable "Plack::Middleware::MethodOverride",
header => 'X-HTTP-Method';
Specifies the HTTP header name to specify the overriding HTTP
method. Defaults to C<X-HTTP-Method-Override>.
=back
=head1 AUTHOR
Tatsuhiko Miyagawa
Based on L<HTTP::Engine::Middleware::MethodOverride>
=head1 SEE ALSO
L<Plack::Middleware>
=cut
|