From ed41c518509ee3d8159284ceb269f6e36d32e3c2 Mon Sep 17 00:00:00 2001 From: Michael Schoonmaker Date: Thu, 27 Sep 2012 11:26:56 -0700 Subject: [PATCH 1/2] Updated Memory.merge to handle null values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, if the Memory store was merged with an object containing a null value, the following Error occurred: TypeError: Object.keys called on non-object     at Function.keys (native)     at Memory.merge (/.../node_modules/nconf/lib/nconf/stores/memory.js:199:17)     at Memory.merge (/.../node_modules/nconf/lib/nconf/stores/memory.js:200:17)     at Array.every (native)     at Memory.merge (/.../node_modules/nconf/lib/nconf/stores/memory.js:199:29)     at common.merge (/.../node_modules/nconf/lib/nconf/common.js:99:13)     at Array.forEach (native)     at common.merge (/.../node_modules/nconf/lib/nconf/common.js:98:22)     at Array.forEach (native)     at Object.common.merge (/.../node_modules/nconf/lib/nconf/common.js:97:8) This commit prevents that. --- lib/nconf/stores/memory.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/nconf/stores/memory.js b/lib/nconf/stores/memory.js index b53ac12..215953c 100644 --- a/lib/nconf/stores/memory.js +++ b/lib/nconf/stores/memory.js @@ -157,7 +157,7 @@ Memory.prototype.merge = function (key, value) { // If the key is not an `Object` or is an `Array`, // then simply set it. Merging is for Objects. // - if (typeof value !== 'object' || Array.isArray(value)) { + if (typeof value !== 'object' || Array.isArray(value) || value === null) { return this.set(key, value); } From 5d2ebfbe9ffbf3e7134a3870e4a0a6a64ee99bd8 Mon Sep 17 00:00:00 2001 From: Michael Schoonmaker Date: Thu, 20 Dec 2012 19:02:36 -0800 Subject: [PATCH 2/2] Added test to confirm merging an Object and null behaves as expected. --- test/fixtures/merge/file1.json | 3 +++ test/fixtures/merge/file2.json | 5 +++-- test/provider-test.js | 5 +++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/test/fixtures/merge/file1.json b/test/fixtures/merge/file1.json index b48f5c0..f9e1ca9 100644 --- a/test/fixtures/merge/file1.json +++ b/test/fixtures/merge/file1.json @@ -12,5 +12,8 @@ "first": 1, "second": 2 } + }, + "unicorn": { + "exists": true } } diff --git a/test/fixtures/merge/file2.json b/test/fixtures/merge/file2.json index 815779c..7940cb9 100644 --- a/test/fixtures/merge/file2.json +++ b/test/fixtures/merge/file2.json @@ -5,5 +5,6 @@ "something4": true }, "dates": true, - "elderberries": true -} \ No newline at end of file + "elderberries": true, + "unicorn": null +} diff --git a/test/provider-test.js b/test/provider-test.js index 78ee97d..0805369 100644 --- a/test/provider-test.js +++ b/test/provider-test.js @@ -84,6 +84,11 @@ vows.describe('nconf/provider').addBatch({ provider.merge(override); helpers.assertMerged(null, provider.stores.file.store); assert.equal(provider.stores.file.store.candy.something, 'file1'); + }, + "should merge Objects over null": function (provider) { + provider.load(); + provider.merge(override); + assert.equal(provider.stores.file.store.unicorn.exists, true); } } }