package App::Donburi::Web::Request;
use strict;
use warnings;
use parent qw/Plack::Request/;
use Encode ();
use Hash::MultiValue;
sub is_post_request { $_[0]->method eq 'POST' }
sub http_host { $_[0]->env->{HTTP_HOST} }
# from Amon2::Request
sub body_parameters {
my ($self) = @_;
$self->{'donburi.body_parameters'} ||= $self->_decode_parameters($self->SUPER::body_parameters());
}
sub query_parameters {
my ($self) = @_;
$self->{'donburi.query_parameters'} ||= $self->_decode_parameters($self->SUPER::query_parameters());
}
sub _decode_parameters {
my ($self, $stuff) = @_;
my $encoding = 'utf-8';
my @flatten = $stuff->flatten();
my @decoded;
while ( my ($k, $v) = splice @flatten, 0, 2 ) {
push @decoded, Encode::decode($encoding, $k), Encode::decode($encoding, $v);
}
return Hash::MultiValue->new(@decoded);
}
sub parameters {
my $self = shift;
$self->env->{'donburi.request.merged'} ||= do {
my $query = $self->query_parameters;
my $body = $self->body_parameters;
Hash::MultiValue->new( $query->flatten, $body->flatten );
};
}
1;