Skip to content

Commit

Permalink
Merge pull request #1638 from simov/deep-extend
Browse files Browse the repository at this point in the history
Use the `extend` module to deep extend in the defaults method
  • Loading branch information
simov committed Jun 15, 2015
2 parents 7d0ee92 + eb710b0 commit 52a05a2
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 18 deletions.
25 changes: 9 additions & 16 deletions index.js
Expand Up @@ -14,7 +14,7 @@

'use strict'

var extend = require('util')._extend
var extend = require('extend')
, cookies = require('./lib/cookies')
, helpers = require('./lib/helpers')

Expand All @@ -30,12 +30,11 @@ function initParams(uri, options, callback) {

var params = {}
if (typeof options === 'object') {
params = extend({}, options)
params = extend(params, {uri: uri})
extend(params, options, {uri: uri})
} else if (typeof uri === 'string') {
params = extend({}, {uri: uri})
extend(params, {uri: uri})
} else {
params = extend({}, uri)
extend(params, uri)
}

params.callback = callback
Expand Down Expand Up @@ -86,24 +85,18 @@ function wrapRequestMethod (method, options, requester, verb) {
return function (uri, opts, callback) {
var params = initParams(uri, opts, callback)

var headerlessOptions = extend({}, options)
delete headerlessOptions.headers
params = extend(headerlessOptions, params)

if (options.headers) {
var headers = extend({}, options.headers)
params.headers = extend(headers, params.headers)
}
var target = {}
extend(true, target, options, params)

if (verb) {
params.method = (verb === 'del' ? 'DELETE' : verb.toUpperCase())
target.method = (verb === 'del' ? 'DELETE' : verb.toUpperCase())
}

if (isFunction(requester)) {
method = requester
}

return method(params, params.callback)
return method(target, target.callback)
}
}

Expand Down Expand Up @@ -131,7 +124,7 @@ request.defaults = function (options, requester) {
request.forever = function (agentOptions, optionsArg) {
var options = {}
if (optionsArg) {
options = extend({}, optionsArg)
extend(options, optionsArg)
}
if (agentOptions) {
options.agentOptions = agentOptions
Expand Down
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -24,6 +24,7 @@
"dependencies": {
"bl": "~0.9.0",
"caseless": "~0.10.0",
"extend": "~2.0.1",
"forever-agent": "~0.6.0",
"form-data": "~0.2.0",
"json-stringify-safe": "~5.0.0",
Expand Down
2 changes: 1 addition & 1 deletion tests/server.js
Expand Up @@ -13,7 +13,7 @@ exports.portSSL = 16167
exports.createServer = function (port) {
port = port || exports.port
var s = http.createServer(function (req, resp) {
s.emit(req.url, req, resp)
s.emit(req.url.replace(/(\?.*)/, ''), req, resp)
})
s.port = port
s.url = 'http://localhost:' + port
Expand Down
24 changes: 23 additions & 1 deletion tests/test-defaults.js
Expand Up @@ -2,6 +2,7 @@

var server = require('./server')
, request = require('../index')
, qs = require('qs')
, tape = require('tape')

var s = server.createServer()
Expand All @@ -10,7 +11,10 @@ tape('setup', function(t) {
s.listen(s.port, function() {
s.on('/', function (req, res) {
res.writeHead(200, {'content-type': 'application/json'})
res.end(JSON.stringify({method: req.method, headers: req.headers}))
res.end(JSON.stringify({
method: req.method, headers: req.headers,
qs: qs.parse(req.url.replace(/.*\?(.*)/, '$1'))
}))
})

s.on('/head', function (req, res) {
Expand Down Expand Up @@ -58,6 +62,24 @@ tape('merge headers', function(t) {
})
})

tape('deep extend', function(t) {
request.defaults({
headers: {a: 1, b: 2 },
qs: { a: 1, b: 2 }
})(s.url + '/', {
headers: { b: 3, c: 4 },
qs: { b: 3, c: 4 },
json: true
}, function (e, r, b) {
delete b.headers.host
delete b.headers.accept
delete b.headers.connection
t.deepEqual(b.headers, { a: '1', b: '3', c: '4' })
t.deepEqual(b.qs, { a: '1', b: '3', c: '4' })
t.end()
})
})

tape('default undefined header', function(t) {
request.defaults({
headers: { foo: 'bar', test: undefined }, json: true
Expand Down

0 comments on commit 52a05a2

Please sign in to comment.