Comparing version 1.0.1 to 1.1.0
97
index.js
@@ -111,13 +111,45 @@ 'use strict'; | ||
/** | ||
* Create an error object from the response and call the callback function | ||
* @param {Object} body The parsed response body (or null if not yet parsed) | ||
* @param {Response} response The HTTP response object | ||
* @param {Function} callback Function to call with the resulting error object | ||
* @returns {void} | ||
*/ | ||
function handleError(body, response, callback) { | ||
var error; | ||
if (!body) { | ||
response.pipe(concat(function (body) { | ||
body = parseJSONBody(body); | ||
error = body.message || statusText(response.statusCode); | ||
callback(new Error(error), body, response); | ||
})); | ||
} else { | ||
error = body.message || statusText(response.statusCode); | ||
callback(new Error(error), body, response); | ||
} | ||
} | ||
/** | ||
* Return an http response handler for API calls | ||
* @param {Function} callback The callback method to call | ||
* @param {Array} okStatusCodes (optional) HTTP status codes to use as OK (default: [200]) | ||
* @param {Boolean} noBuffer (optional) If true, the response will not be buffered and JSON parsed (unless error), default: false | ||
* @param {Function} retryFn (optional) If defined, function to call when receiving a Retry-After header | ||
* @returns {Function} The response handler | ||
*/ | ||
function createResponseHandler(callback, okStatusCodes, retryFn) { | ||
function createResponseHandler(callback, okStatusCodes, noBuffer, retryFn) { | ||
if (typeof callback !== 'function') { | ||
callback = function () {}; | ||
} | ||
if (typeof okStatusCodes === 'function') { | ||
retryFn = okStatusCodes; | ||
okStatusCodes = null; | ||
noBuffer = retryFn; | ||
} | ||
if (typeof noBuffer === 'function') { | ||
retryFn = noBuffer; | ||
noBuffer = false; | ||
} | ||
okStatusCodes = okStatusCodes || [200]; | ||
@@ -144,3 +176,3 @@ | ||
// the handler expects a parsed response body | ||
if (callback.length === 3 && typeof body === 'undefined') { | ||
if (noBuffer !== true && typeof body === 'undefined') { | ||
response.pipe(concat(function (body) { | ||
@@ -154,3 +186,7 @@ handleResponse(response, parseJSONBody(body)); | ||
if (!retry(response)) { | ||
callback(null, response, body); | ||
if (noBuffer) { | ||
callback(null, response); | ||
} else { | ||
callback(null, body, response); | ||
} | ||
} | ||
@@ -163,12 +199,4 @@ } else { | ||
} | ||
if (!body) { | ||
response.pipe(concat(function (body) { | ||
error = parseJSONBody(body); | ||
error = error.message || statusText(response.statusCode); | ||
callback(new Error(error), response, error); | ||
})); | ||
} else { | ||
error = body.message || statusText(response.statusCode); | ||
callback(new Error(error), response, body); | ||
} | ||
handleError(body, response, callback); | ||
} | ||
@@ -187,30 +215,2 @@ } | ||
/** | ||
* Create a callback function that expects a buffered response | ||
* @param {Function} fn The callback function | ||
* @returns {Function} | ||
*/ | ||
function createBufferedCallback(fn) { | ||
if (typeof fn === 'function') { | ||
return function (err, res, body) { | ||
fn(err, body, res); | ||
}; | ||
} | ||
return function () {}; | ||
} | ||
/** | ||
* Create a callback function that explicitly expects a non-buffered response | ||
* @param {Function} fn The callback function | ||
* @returns {Function} | ||
*/ | ||
function createCallback(fn) { | ||
if (typeof fn === 'function') { | ||
return function (err, res) { | ||
fn(err, res); | ||
}; | ||
} | ||
return function () {}; | ||
} | ||
/** | ||
* The BoxView client constructor | ||
@@ -278,3 +278,2 @@ * @param {String} key The API token | ||
callback = createBufferedCallback(callback); | ||
handler = createResponseHandler(callback, retry); | ||
@@ -324,3 +323,2 @@ | ||
callback = createBufferedCallback(callback); | ||
handler = createResponseHandler(callback, retry); | ||
@@ -363,3 +361,2 @@ | ||
callback = createBufferedCallback(callback); | ||
handler = createResponseHandler(callback, retry); | ||
@@ -398,4 +395,3 @@ | ||
callback = createCallback(callback); | ||
handler = createResponseHandler(callback, [204], retry); | ||
handler = createResponseHandler(callback, [204], true, retry); | ||
@@ -481,3 +477,2 @@ return req(client.documentsURL + '/' + id, { method: 'DELETE' }, handler); | ||
callback = createBufferedCallback(callback); | ||
handler = createResponseHandler(callback, [200, 202], retry); | ||
@@ -547,3 +542,2 @@ | ||
callback = createBufferedCallback(callback); | ||
handler = createResponseHandler(callback, [200, 202], retry); | ||
@@ -593,4 +587,3 @@ | ||
callback = createCallback(callback); | ||
handler = createResponseHandler(callback, [200, 202], retry); | ||
handler = createResponseHandler(callback, [200, 202], true, retry); | ||
@@ -635,4 +628,3 @@ url = client.documentsURL + '/' + id + '/content' + extension; | ||
callback = createCallback(callback); | ||
handler = createResponseHandler(callback, [200, 202], retry); | ||
handler = createResponseHandler(callback, [200, 202], true, retry); | ||
@@ -692,3 +684,2 @@ query = querystring.stringify(params); | ||
callback = createBufferedCallback(callback); | ||
handler = createResponseHandler(callback, [201, 202], retry); | ||
@@ -695,0 +686,0 @@ |
{ | ||
"name": "box-view", | ||
"version": "1.0.1", | ||
"version": "1.1.0", | ||
"description": "A node client for the Box View API", | ||
"main": "index.js", | ||
"scripts": { | ||
"test": "node_modules/.bin/tape test/box-view-test.js" | ||
"test": "node_modules/.bin/tape test/box-view-test.js", | ||
"api-test": "node_modules/.bin/tape test/api-test.js" | ||
}, | ||
@@ -9,0 +10,0 @@ "browser": { |
@@ -103,3 +103,4 @@ [![Build Status](https://travis-ci.org/lakenen/node-box-view.png?branch=master)](https://travis-ci.org/lakenen/node-box-view) | ||
* an error object or `null` | ||
* the http response object | ||
* JSON-parsed body if error | ||
* the http response object if error | ||
@@ -155,3 +156,4 @@ #### uploadFile | ||
* an error object or `null` | ||
* the http response object | ||
* the http response object (or JSON-parsed body if error) | ||
* the http response object if error | ||
@@ -184,3 +186,4 @@ Example: | ||
* an error object or `null` | ||
* the http response object | ||
* the http response object (or JSON-parsed body if error) | ||
* the http response object if error | ||
@@ -187,0 +190,0 @@ Example: |
235
74149
1078