Merge pull request #16 from MychaelZ/bug-delete-method

Remove `data` parameter from `delete` method, so that it matches the documented API
pull/4/head
Sven Slootweg 8 years ago
commit d08ecd1596

@ -589,7 +589,7 @@ bhttpAPI =
patch: (url, data, options = {}, callback) -> patch: (url, data, options = {}, callback) ->
options.method = "patch" options.method = "patch"
doPayloadRequest.bind(this) url, data, options, callback doPayloadRequest.bind(this) url, data, options, callback
delete: (url, data, options = {}, callback) -> delete: (url, options = {}, callback) ->
options.method = "delete" options.method = "delete"
@request url, options, callback @request url, options, callback
request: (url, options = {}, callback) -> request: (url, options = {}, callback) ->

@ -1,4 +1,5 @@
var Promise, S, addErrorData, bhttpAPI, bhttpErrors, concatStream, createCookieJar, debug, debugRequest, debugResponse, devNull, doPayloadRequest, doRedirect, errors, extend, formData, formFixArray, http, https, isStream, makeRequest, ofTypes, packageConfig, prepareCleanup, prepareDefaults, prepareOptions, preparePayload, prepareProtocol, prepareRequest, prepareSession, prepareUrl, processResponse, querystring, redirectGet, redirectUnchanged, sink, spy, stream, streamLength, toughCookie, urlUtil, util, _; // Generated by CoffeeScript 1.9.3
var Promise, S, _, addErrorData, bhttpAPI, bhttpErrors, concatStream, createCookieJar, debug, debugRequest, debugResponse, devNull, doPayloadRequest, doRedirect, errors, extend, formData, formFixArray, http, https, isStream, makeRequest, ofTypes, packageConfig, prepareCleanup, prepareDefaults, prepareOptions, preparePayload, prepareProtocol, prepareRequest, prepareSession, prepareUrl, processResponse, querystring, redirectGet, redirectUnchanged, sink, spy, stream, streamLength, toughCookie, urlUtil, util;
urlUtil = require("url"); urlUtil = require("url");
@ -90,10 +91,10 @@ errors.create({
}); });
ofTypes = function(obj, types) { ofTypes = function(obj, types) {
var match, type, _i, _len; var i, len, match, type;
match = false; match = false;
for (_i = 0, _len = types.length; _i < _len; _i++) { for (i = 0, len = types.length; i < len; i++) {
type = types[_i]; type = types[i];
match = match || obj instanceof type; match = match || obj instanceof type;
} }
return match; return match;
@ -140,27 +141,27 @@ prepareSession = function(request, response, requestState) {
prepareDefaults = function(request, response, requestState) { prepareDefaults = function(request, response, requestState) {
debugRequest("preparing defaults"); debugRequest("preparing defaults");
return Promise["try"](function() { return Promise["try"](function() {
var _base, _base1, _base2, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7; var base, base1, base2, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7;
request.responseOptions = { request.responseOptions = {
discardResponse: (_ref = request.options.discardResponse) != null ? _ref : false, discardResponse: (ref = request.options.discardResponse) != null ? ref : false,
keepRedirectResponses: (_ref1 = request.options.keepRedirectResponses) != null ? _ref1 : false, keepRedirectResponses: (ref1 = request.options.keepRedirectResponses) != null ? ref1 : false,
followRedirects: (_ref2 = request.options.followRedirects) != null ? _ref2 : true, followRedirects: (ref2 = request.options.followRedirects) != null ? ref2 : true,
noDecode: (_ref3 = request.options.noDecode) != null ? _ref3 : false, noDecode: (ref3 = request.options.noDecode) != null ? ref3 : false,
decodeJSON: (_ref4 = request.options.decodeJSON) != null ? _ref4 : false, decodeJSON: (ref4 = request.options.decodeJSON) != null ? ref4 : false,
stream: (_ref5 = request.options.stream) != null ? _ref5 : false, stream: (ref5 = request.options.stream) != null ? ref5 : false,
justPrepare: (_ref6 = request.options.justPrepare) != null ? _ref6 : false, justPrepare: (ref6 = request.options.justPrepare) != null ? ref6 : false,
redirectLimit: (_ref7 = request.options.redirectLimit) != null ? _ref7 : 10, redirectLimit: (ref7 = request.options.redirectLimit) != null ? ref7 : 10,
onDownloadProgress: request.options.onDownloadProgress, onDownloadProgress: request.options.onDownloadProgress,
responseTimeout: request.options.responseTimeout responseTimeout: request.options.responseTimeout
}; };
if ((_base = request.options).allowChunkedMultipart == null) { if ((base = request.options).allowChunkedMultipart == null) {
_base.allowChunkedMultipart = false; base.allowChunkedMultipart = false;
} }
if ((_base1 = request.options).forceMultipart == null) { if ((base1 = request.options).forceMultipart == null) {
_base1.forceMultipart = false; base1.forceMultipart = false;
} }
if ((_base2 = request.options.headers)["user-agent"] == null) { if ((base2 = request.options.headers)["user-agent"] == null) {
_base2["user-agent"] = "bhttp/" + packageConfig.version; base2["user-agent"] = "bhttp/" + packageConfig.version;
} }
request.options.method = request.options.method.toLowerCase(); request.options.method = request.options.method.toLowerCase();
return Promise.resolve([request, response, requestState]); return Promise.resolve([request, response, requestState]);
@ -170,7 +171,7 @@ prepareDefaults = function(request, response, requestState) {
prepareUrl = function(request, response, requestState) { prepareUrl = function(request, response, requestState) {
debugRequest("preparing URL"); debugRequest("preparing URL");
return Promise["try"](function() { return Promise["try"](function() {
var urlOptions, _ref; var ref, urlOptions;
urlOptions = urlUtil.parse(request.url, true); urlOptions = urlUtil.parse(request.url, true);
_.extend(request.options, { _.extend(request.options, {
hostname: urlOptions.hostname, hostname: urlOptions.hostname,
@ -178,7 +179,7 @@ prepareUrl = function(request, response, requestState) {
}); });
request.options.path = urlUtil.format({ request.options.path = urlUtil.format({
pathname: urlOptions.pathname, pathname: urlOptions.pathname,
query: (_ref = request.options.query) != null ? _ref : urlOptions.query query: (ref = request.options.query) != null ? ref : urlOptions.query
}); });
request.protocol = S(urlOptions.protocol).chompRight(":").toString(); request.protocol = S(urlOptions.protocol).chompRight(":").toString();
return Promise.resolve([request, response, requestState]); return Promise.resolve([request, response, requestState]);
@ -188,7 +189,7 @@ prepareUrl = function(request, response, requestState) {
prepareProtocol = function(request, response, requestState) { prepareProtocol = function(request, response, requestState) {
debugRequest("preparing protocol"); debugRequest("preparing protocol");
return Promise["try"](function() { return Promise["try"](function() {
var _base; var base;
request.protocolModule = (function() { request.protocolModule = (function() {
switch (request.protocol) { switch (request.protocol) {
case "http": case "http":
@ -202,8 +203,8 @@ prepareProtocol = function(request, response, requestState) {
if (request.protocolModule == null) { if (request.protocolModule == null) {
return Promise.reject()(new bhttpErrors.UnsupportedProtocolError("The protocol specified (" + protocol + ") is not currently supported by this module.")); return Promise.reject()(new bhttpErrors.UnsupportedProtocolError("The protocol specified (" + protocol + ") is not currently supported by this module."));
} }
if ((_base = request.options).port == null) { if ((base = request.options).port == null) {
_base.port = (function() { base.port = (function() {
switch (request.protocol) { switch (request.protocol) {
case "http": case "http":
return 80; return 80;
@ -219,7 +220,7 @@ prepareProtocol = function(request, response, requestState) {
prepareOptions = function(request, response, requestState) { prepareOptions = function(request, response, requestState) {
debugRequest("preparing options"); debugRequest("preparing options");
return Promise["try"](function() { return Promise["try"](function() {
var _base; var base;
if (((request.options.formFields != null) || (request.options.files != null)) && ((request.options.inputStream != null) || (request.options.inputBuffer != null))) { if (((request.options.formFields != null) || (request.options.files != null)) && ((request.options.inputStream != null) || (request.options.inputBuffer != null))) {
return Promise.reject(addErrorData(new bhttpErrors.ConflictingOptionsError("You cannot define both formFields/files and a raw inputStream or inputBuffer."), request, response, requestState)); return Promise.reject(addErrorData(new bhttpErrors.ConflictingOptionsError("You cannot define both formFields/files and a raw inputStream or inputBuffer."), request, response, requestState));
} }
@ -227,8 +228,8 @@ prepareOptions = function(request, response, requestState) {
return Promise.reject(addErrorData(new bhttpErrors.ConflictingOptionsError("You cannot use both encodeJSON and a raw inputStream or inputBuffer.", void 0, "If you meant to JSON-encode the stream, you will currently have to do so manually."), request, response, requestState)); return Promise.reject(addErrorData(new bhttpErrors.ConflictingOptionsError("You cannot use both encodeJSON and a raw inputStream or inputBuffer.", void 0, "If you meant to JSON-encode the stream, you will currently have to do so manually."), request, response, requestState));
} }
if (request.responseOptions.stream) { if (request.responseOptions.stream) {
if ((_base = request.options).agent == null) { if ((base = request.options).agent == null) {
_base.agent = false; base.agent = false;
} }
} }
return Promise.resolve([request, response, requestState]); return Promise.resolve([request, response, requestState]);
@ -238,7 +239,7 @@ prepareOptions = function(request, response, requestState) {
preparePayload = function(request, response, requestState) { preparePayload = function(request, response, requestState) {
debugRequest("preparing payload"); debugRequest("preparing payload");
return Promise["try"](function() { return Promise["try"](function() {
var containsStreams, fieldName, fieldValue, formDataObject, multipart, streamOptions, valueElement, _i, _len, _ref, _ref1, _ref2; var containsStreams, fieldName, fieldValue, formDataObject, i, len, multipart, ref, ref1, ref2, streamOptions, valueElement;
request.onUploadProgress = request.options.onUploadProgress; request.onUploadProgress = request.options.onUploadProgress;
multipart = request.options.forceMultipart || (request.options.files != null); multipart = request.options.forceMultipart || (request.options.files != null);
multipart = multipart || _.any(request.options.formFields, function(item) { multipart = multipart || _.any(request.options.formFields, function(item) {
@ -251,13 +252,13 @@ preparePayload = function(request, response, requestState) {
if (request.options.encodeJSON && containsStreams) { if (request.options.encodeJSON && containsStreams) {
return Promise.reject()(new bhttpErrors.ConflictingOptionsError("Sending a JSON-encoded payload containing data from a stream is not currently supported.", void 0, "Either don't use encodeJSON, or read your stream into a string or Buffer.")); return Promise.reject()(new bhttpErrors.ConflictingOptionsError("Sending a JSON-encoded payload containing data from a stream is not currently supported.", void 0, "Either don't use encodeJSON, or read your stream into a string or Buffer."));
} }
if ((_ref = request.options.method) !== "get" && _ref !== "head" && _ref !== "delete") { if ((ref = request.options.method) !== "get" && ref !== "head" && ref !== "delete") {
if ((request.options.encodeJSON || (request.options.formFields != null)) && !multipart) { if ((request.options.encodeJSON || (request.options.formFields != null)) && !multipart) {
debugRequest("got url-encodable form-data"); debugRequest("got url-encodable form-data");
if (request.options.encodeJSON) { if (request.options.encodeJSON) {
debugRequest("... but encodeJSON was set, so we will send JSON instead"); debugRequest("... but encodeJSON was set, so we will send JSON instead");
request.options.headers["content-type"] = "application/json"; request.options.headers["content-type"] = "application/json";
request.payload = JSON.stringify((_ref1 = request.options.formFields) != null ? _ref1 : null); request.payload = JSON.stringify((ref1 = request.options.formFields) != null ? ref1 : null);
} else if (!_.isEmpty(request.options.formFields)) { } else if (!_.isEmpty(request.options.formFields)) {
request.options.headers["content-type"] = "application/x-www-form-urlencoded"; request.options.headers["content-type"] = "application/x-www-form-urlencoded";
request.payload = querystring.stringify(formFixArray(request.options.formFields)); request.payload = querystring.stringify(formFixArray(request.options.formFields));
@ -269,14 +270,14 @@ preparePayload = function(request, response, requestState) {
} else if ((request.options.formFields != null) && multipart) { } else if ((request.options.formFields != null) && multipart) {
debugRequest("got multipart form-data"); debugRequest("got multipart form-data");
formDataObject = new formData(); formDataObject = new formData();
_ref2 = formFixArray(request.options.formFields); ref2 = formFixArray(request.options.formFields);
for (fieldName in _ref2) { for (fieldName in ref2) {
fieldValue = _ref2[fieldName]; fieldValue = ref2[fieldName];
if (!_.isArray(fieldValue)) { if (!_.isArray(fieldValue)) {
fieldValue = [fieldValue]; fieldValue = [fieldValue];
} }
for (_i = 0, _len = fieldValue.length; _i < _len; _i++) { for (i = 0, len = fieldValue.length; i < len; i++) {
valueElement = fieldValue[_i]; valueElement = fieldValue[i];
if (valueElement._bhttpStreamWrapper != null) { if (valueElement._bhttpStreamWrapper != null) {
streamOptions = valueElement.options; streamOptions = valueElement.options;
valueElement = valueElement.stream; valueElement = valueElement.stream;
@ -300,10 +301,10 @@ preparePayload = function(request, response, requestState) {
} else if (request.options.inputStream != null) { } else if (request.options.inputStream != null) {
debugRequest("got inputStream"); debugRequest("got inputStream");
return Promise["try"](function() { return Promise["try"](function() {
var _ref3; var ref3;
request.payloadStream = request.options.inputStream; request.payloadStream = request.options.inputStream;
if ((request.payloadStream._bhttpStreamWrapper != null) && ((request.payloadStream.options.contentLength != null) || (request.payloadStream.options.knownLength != null))) { if ((request.payloadStream._bhttpStreamWrapper != null) && ((request.payloadStream.options.contentLength != null) || (request.payloadStream.options.knownLength != null))) {
return Promise.resolve((_ref3 = request.payloadStream.options.contentLength) != null ? _ref3 : request.payloadStream.options.knownLength); return Promise.resolve((ref3 = request.payloadStream.options.contentLength) != null ? ref3 : request.payloadStream.options.knownLength);
} else { } else {
return streamLength(request.options.inputStream); return streamLength(request.options.inputStream);
} }
@ -338,16 +339,16 @@ preparePayload = function(request, response, requestState) {
prepareCleanup = function(request, response, requestState) { prepareCleanup = function(request, response, requestState) {
debugRequest("preparing cleanup"); debugRequest("preparing cleanup");
return Promise["try"](function() { return Promise["try"](function() {
var fixedHeaders, key, value, _i, _len, _ref, _ref1; var fixedHeaders, i, key, len, ref, ref1, value;
_ref = ["query", "formFields", "files", "encodeJSON", "inputStream", "inputBuffer", "discardResponse", "keepRedirectResponses", "followRedirects", "noDecode", "decodeJSON", "allowChunkedMultipart", "forceMultipart", "onUploadProgress", "onDownloadProgress"]; ref = ["query", "formFields", "files", "encodeJSON", "inputStream", "inputBuffer", "discardResponse", "keepRedirectResponses", "followRedirects", "noDecode", "decodeJSON", "allowChunkedMultipart", "forceMultipart", "onUploadProgress", "onDownloadProgress"];
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (i = 0, len = ref.length; i < len; i++) {
key = _ref[_i]; key = ref[i];
delete request.options[key]; delete request.options[key];
} }
fixedHeaders = {}; fixedHeaders = {};
_ref1 = request.options.headers; ref1 = request.options.headers;
for (key in _ref1) { for (key in ref1) {
value = _ref1[key]; value = ref1[key];
fixedHeaders[key.toLowerCase()] = value; fixedHeaders[key.toLowerCase()] = value;
} }
request.options.headers = fixedHeaders; request.options.headers = fixedHeaders;
@ -444,26 +445,26 @@ processResponse = function(request, response, requestState) {
var cookieHeader, promises; var cookieHeader, promises;
if ((request.cookieJar != null) && (response.headers["set-cookie"] != null)) { if ((request.cookieJar != null) && (response.headers["set-cookie"] != null)) {
promises = (function() { promises = (function() {
var _i, _len, _ref, _results; var i, len, ref, results;
_ref = response.headers["set-cookie"]; ref = response.headers["set-cookie"];
_results = []; results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (i = 0, len = ref.length; i < len; i++) {
cookieHeader = _ref[_i]; cookieHeader = ref[i];
debugResponse("storing cookie: %s", cookieHeader); debugResponse("storing cookie: %s", cookieHeader);
_results.push(request.cookieJar.set(cookieHeader, request.url)); results.push(request.cookieJar.set(cookieHeader, request.url));
} }
return _results; return results;
})(); })();
return Promise.all(promises); return Promise.all(promises);
} else { } else {
return Promise.resolve(); return Promise.resolve();
} }
}).then(function() { }).then(function() {
var completedBytes, progressStream, totalBytes, _ref, _ref1; var completedBytes, progressStream, ref, ref1, totalBytes;
response.request = request; response.request = request;
response.requestState = requestState; response.requestState = requestState;
response.redirectHistory = requestState.redirectHistory; response.redirectHistory = requestState.redirectHistory;
if (((_ref = response.statusCode) === 301 || _ref === 302 || _ref === 303 || _ref === 307) && request.responseOptions.followRedirects) { if (((ref = response.statusCode) === 301 || ref === 302 || ref === 303 || ref === 307) && request.responseOptions.followRedirects) {
if (requestState.redirectHistory.length >= (request.responseOptions.redirectLimit - 1)) { if (requestState.redirectHistory.length >= (request.responseOptions.redirectLimit - 1)) {
return Promise.reject(addErrorData(new bhttpErrors.RedirectError("The maximum amount of redirects ({request.responseOptions.redirectLimit}) was reached."))); return Promise.reject(addErrorData(new bhttpErrors.RedirectError("The maximum amount of redirects ({request.responseOptions.redirectLimit}) was reached.")));
} }
@ -486,7 +487,7 @@ processResponse = function(request, response, requestState) {
case 303: case 303:
return redirectGet(request, response, requestState); return redirectGet(request, response, requestState);
case 307: case 307:
if (request.containsStreams && ((_ref1 = request.options.method) !== "get" && _ref1 !== "head")) { if (request.containsStreams && ((ref1 = request.options.method) !== "get" && ref1 !== "head")) {
return Promise.reject(addErrorData(new bhttpErrors.RedirectError("Encountered a 307 redirect for POST, PUT or DELETE, but your payload contained (single-use) streams. We therefore can't automatically follow the redirect."), request, response, requestState)); return Promise.reject(addErrorData(new bhttpErrors.RedirectError("Encountered a 307 redirect for POST, PUT or DELETE, but your payload contained (single-use) streams. We therefore can't automatically follow the redirect."), request, response, requestState));
} else { } else {
return redirectUnchanged(request, response, requestState); return redirectUnchanged(request, response, requestState);
@ -511,7 +512,7 @@ processResponse = function(request, response, requestState) {
}); });
} }
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
var attachProgressStream, _on, _progressStreamAttached, _resume; var _on, _progressStreamAttached, _resume, attachProgressStream;
_resume = response.resume.bind(response); _resume = response.resume.bind(response);
_on = response.on.bind(response); _on = response.on.bind(response);
_progressStreamAttached = false; _progressStreamAttached = false;
@ -540,8 +541,8 @@ processResponse = function(request, response, requestState) {
return reject(err); return reject(err);
}); });
return response.pipe(concatStream(function(body) { return response.pipe(concatStream(function(body) {
var err, _ref2; var err, ref2;
if (request.responseOptions.decodeJSON || (((_ref2 = response.headers["content-type"]) != null ? _ref2 : "").split(";")[0] === "application/json" && !request.responseOptions.noDecode)) { if (request.responseOptions.decodeJSON || (((ref2 = response.headers["content-type"]) != null ? ref2 : "").split(";")[0] === "application/json" && !request.responseOptions.noDecode)) {
try { try {
response.body = JSON.parse(body); response.body = JSON.parse(body);
} catch (_error) { } catch (_error) {
@ -575,12 +576,12 @@ doPayloadRequest = function(url, data, options, callback) {
redirectGet = function(request, response, requestState) { redirectGet = function(request, response, requestState) {
debugResponse("following forced-GET redirect to %s", response.headers["location"]); debugResponse("following forced-GET redirect to %s", response.headers["location"]);
return Promise["try"](function() { return Promise["try"](function() {
var key, options, _i, _len, _ref; var i, key, len, options, ref;
options = _.clone(requestState.originalOptions); options = _.clone(requestState.originalOptions);
options.method = "get"; options.method = "get";
_ref = ["inputBuffer", "inputStream", "files", "formFields"]; ref = ["inputBuffer", "inputStream", "files", "formFields"];
for (_i = 0, _len = _ref.length; _i < _len; _i++) { for (i = 0, len = ref.length; i < len; i++) {
key = _ref[_i]; key = ref[i];
delete options[key]; delete options[key];
} }
return doRedirect(request, response, requestState, options); return doRedirect(request, response, requestState, options);
@ -674,7 +675,7 @@ bhttpAPI = {
options.method = "patch"; options.method = "patch";
return doPayloadRequest.bind(this)(url, data, options, callback); return doPayloadRequest.bind(this)(url, data, options, callback);
}, },
"delete": function(url, data, options, callback) { "delete": function(url, options, callback) {
if (options == null) { if (options == null) {
options = {}; options = {};
} }
@ -690,7 +691,7 @@ bhttpAPI = {
_doRequest: function(url, options, requestState) { _doRequest: function(url, options, requestState) {
return Promise["try"]((function(_this) { return Promise["try"]((function(_this) {
return function() { return function() {
var request, response, _ref; var ref, request, response;
request = { request = {
url: url, url: url,
options: _.clone(options) options: _.clone(options)
@ -703,7 +704,7 @@ bhttpAPI = {
}; };
} }
if (requestState.sessionOptions == null) { if (requestState.sessionOptions == null) {
requestState.sessionOptions = (_ref = _this._sessionOptions) != null ? _ref : {}; requestState.sessionOptions = (ref = _this._sessionOptions) != null ? ref : {};
} }
return prepareRequest(request, response, requestState); return prepareRequest(request, response, requestState);
}; };

Loading…
Cancel
Save