http-as-promised
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -14,3 +14,3 @@ var createError = require('create-error'), | ||
range: '4xx', | ||
statusCode: 444, | ||
statusCode: 444.4, | ||
title: 'Client Error', | ||
@@ -21,3 +21,3 @@ summary: 'the request contains bad syntax or cannot be fulfilled' | ||
range: '5xx', | ||
statusCode: 555, | ||
statusCode: 555.5, | ||
title: 'Server Error', | ||
@@ -29,10 +29,8 @@ summary: 'the server failed to fulfill an apparently valid request' | ||
for (var k in error) { | ||
if (error.hasOwnProperty(k)) { | ||
var err = error[k]; | ||
err.type = err.title.replace(' ', ''); | ||
err.message = err.range + ' ' + err.title; | ||
var ErrorType = createError(HTTPError, 'HTTPError', err); | ||
HTTPError[k] = HTTPError[err.range] = ErrorType; | ||
ErrorType.prototype.toJSON = errorToJSON; | ||
} | ||
var err = error[k]; | ||
err.type = err.title.replace(' ', ''); | ||
err.message = err.range + ' ' + err.title; | ||
var ErrorType = createError(HTTPError, 'HTTPError', err); | ||
HTTPError[k] = HTTPError[err.range] = ErrorType; | ||
ErrorType.prototype.toJSON = errorToJSON; | ||
} | ||
@@ -39,0 +37,0 @@ |
@@ -13,8 +13,12 @@ var Promise = require('bluebird'), | ||
'patch', 'del', 'jar', 'cookie' | ||
]; | ||
], | ||
defaultOptions = { | ||
error: true, | ||
method: 'GET' | ||
}; | ||
module.exports = (function wrapRequest(request){ | ||
module.exports = (function wrapRequest(request, defaultOpts){ | ||
reqMethods.forEach(function (method){ | ||
HTTP[method] = HTTP_METHODS.hasOwnProperty(method) | ||
? wrapMethod(method) | ||
? wrapMethod(HTTP_METHODS[method]) | ||
: request[method].bind(request); | ||
@@ -54,5 +58,7 @@ }); | ||
? HTTP.error[statusCode] | ||
: statusCode >= 500 | ||
? HTTP.error.server | ||
: HTTP.error.client | ||
: statusCode < 500 | ||
? HTTP.error.client | ||
: statusCode < 600 | ||
? HTTP.error.server | ||
: HTTP.error; | ||
var httpErr = new HTTPErr; | ||
@@ -62,2 +68,3 @@ httpErr.body = body; | ||
httpErr.response = response; | ||
httpErr.statusCode = statusCode; | ||
reject(httpErr); | ||
@@ -75,3 +82,4 @@ } else if (typeof opts.transform === 'function') { | ||
return function HTTP_METHOD(options, extra){ | ||
return HTTP(setOptions(options, extra, method)); | ||
var opts = setOptions(options, extra, method); | ||
return HTTP(opts); | ||
} | ||
@@ -81,10 +89,23 @@ } | ||
function setDefaults(defaults){ | ||
return wrapRequest(request.defaults(defaults)); | ||
var current = assign({}, defaultOpts); | ||
return wrapRequest( | ||
request.defaults(defaults), | ||
assign(current, defaults) | ||
); | ||
} | ||
function setOptions(options, extra, method){ | ||
var opts = assign(assign({}, defaultOpts), options); | ||
if (typeof options === 'string') { | ||
opts = assign(opts, extra); | ||
opts.uri = options; | ||
} | ||
opts.method = method || opts.method; | ||
return opts; | ||
} | ||
return HTTP; | ||
})(require('request')); | ||
})(require('request'), defaultOptions); | ||
function assign(target, extension){ | ||
if (!target) return extension || {}; | ||
if (typeof extension === 'object' && extension !== null) | ||
@@ -96,14 +117,1 @@ for (var k in extension) | ||
} | ||
function setOptions(options, extra, method){ | ||
var opts = assign({ | ||
error: true, | ||
method: 'GET' | ||
}, options); | ||
if (typeof options === 'string') { | ||
opts.uri = options; | ||
opts = assign(opts, extra); | ||
} | ||
opts.method = method || opts.method; | ||
return opts; | ||
} |
@@ -20,3 +20,3 @@ { | ||
], | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"author": "James Cready <jcready@gmail.com> (http://stackoverflow.com/users/1397319/idbehold)", | ||
@@ -52,4 +52,6 @@ "homepage": "https://github.com/jcready/http-as-promised", | ||
"mocha-lcov-reporter": "0.0.1", | ||
"nock": "^0.46.0" | ||
"nock": "^0.46.0", | ||
"sinon": "^1.10.3", | ||
"sinon-chai": "^2.5.0" | ||
} | ||
} |
# HTTP as Promised — Promisified HTTP client. | ||
[](https://travis-ci.org/jcready/http-as-promised) [](https://coveralls.io/r/jcready/http-as-promised?branch=master) | ||
[![NPM Version][https://img.shields.io/npm/v/http-as-promised.svg?style=flat]][https://npmjs.org/package/http-as-promised] | ||
[](https://travis-ci.org/jcready/http-as-promised) | ||
[](https://coveralls.io/r/jcready/http-as-promised?branch=master) | ||
@@ -5,0 +7,0 @@ Using [Bluebird](https://github.com/petkaantonov/bluebird) and [Create Error](https://github.com/tgriesser/create-error) to make [Request](https://github.com/mikeal/request) easier to use. The most notible difference between this library and simply "promisifying" the request module is that this library will automatically reject the promise with an `HTTPError` if the response status code is an HTTP error status code (e.g. `response.statusCode >= 400`). |
26456
10
619
56
10
2