From 4014e8c8cc7e5e1c9943b7fe565f45c5d785b935 Mon Sep 17 00:00:00 2001 From: "K. Adam White" Date: Sat, 15 Oct 2016 14:42:32 -0400 Subject: [PATCH] Provisionally add support for file attachments to PUT requests --- lib/http-transport.js | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/lib/http-transport.js b/lib/http-transport.js index 6286ae62..552ed355 100644 --- a/lib/http-transport.js +++ b/lib/http-transport.js @@ -210,6 +210,26 @@ function returnHeaders( result ) { return result.headers; } +/** + * Attach data to the request, using form encoding to attach an image to the + * request if an image is provided for upload + * + * @param {Object} request A superagent request object + * @param {Object} data The data for a POST or PUT request + * @param {WPRequest} wpreq A WPRequest query object + * @returns {Object} A superagent request object + */ +function attachDataToRequest( request, data, wpreq ) { + if ( ! wpreq._attachment ) { + return request.send( data ); + } + + // Data must be form-encoded alongside image attachment + return _reduce( data, function( req, value, key ) { + return req.field( key, value ); + }, request.attach( 'file', wpreq._attachment, wpreq._attachmentName ) ); +} + // HTTP Methods: Private HTTP-verb versions // ======================================== @@ -246,14 +266,7 @@ function _httpPost( wpreq, data, callback ) { data = data || {}; var request = _auth( agent.post( url ), wpreq._options, true ); - if ( wpreq._attachment ) { - // Data must be form-encoded alongside image attachment - request = _reduce( data, function( req, value, key ) { - return req.field( key, value ); - }, request.attach( 'file', wpreq._attachment, wpreq._attachmentName ) ); - } else { - request = request.send( data ); - } + request = attachDataToRequest( request, data, wpreq ); return invokeAndPromisify( request, callback, returnBody.bind( null, wpreq ) ); } @@ -272,7 +285,9 @@ function _httpPut( wpreq, data, callback ) { var url = wpreq.toString(); data = data || {}; - var request = _auth( agent.put( url ), wpreq._options, true ).send( data ); + var request = _auth( agent.put( url ), wpreq._options, true ); + + request = attachDataToRequest( request, data, wpreq ); return invokeAndPromisify( request, callback, returnBody.bind( null, wpreq ) ); }