Skip to content

Commit

Permalink
small optimizations
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Jan 9, 2013
1 parent d7e5ae2 commit f951c2e
Showing 1 changed file with 10 additions and 26 deletions.
36 changes: 10 additions & 26 deletions lib/Mojo/UserAgent/Transactor.pm
Expand Up @@ -35,46 +35,30 @@ sub form {
my $form = ref $encoding ? $encoding : shift;
$encoding = undef if ref $encoding;

# Prepare parameters
my $params = Mojo::Parameters->new;
$params->charset($encoding) if defined $encoding;
my $multipart;
for my $name (sort keys %$form) {
my $value = $form->{$name};

# Array
if (ref $value eq 'ARRAY') {
for my $value (@$value) {
$multipart++ if ref $value eq 'HASH';
$params->append($name, $value);
}
}

# Hash
elsif (ref $value eq 'HASH') {
++$multipart and $params->append($name, $value);
}

# Single value
else { $params->append($name, $value) }
}

# New transaction
my $tx = $self->tx(POST => $url, @_);

# Multipart
# Check for uploads and force multipart
my $multipart;
for my $value (map { ref $_ eq 'ARRAY' ? @$_ : $_ } values %$form) {
++$multipart and last if ref $value eq 'HASH';
}
my $req = $tx->req;
my $headers = $req->headers;
$headers->content_type('multipart/form-data') if $multipart;

# Multipart
if (($headers->content_type // '') eq 'multipart/form-data') {
my $parts = $self->_multipart($encoding, $params->to_hash);
my $parts = $self->_multipart($encoding, $form);
$req->content(
Mojo::Content::MultiPart->new(headers => $headers, parts => $parts));
}

# Urlencoded
else {
$headers->content_type('application/x-www-form-urlencoded');
my $params = Mojo::Parameters->new(%$form);
$params->charset($encoding) if defined $encoding;
$req->body($params->to_string);
}

Expand Down

0 comments on commit f951c2e

Please sign in to comment.