Skip to content

Commit e4f62f6

Browse files
committed
add deepExtend & tests
1 parent 666482d commit e4f62f6

File tree

4 files changed

+58
-6
lines changed

4 files changed

+58
-6
lines changed

lib/helpers/deep-extend.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"use strict";
2+
3+
function deepExtend(destination, source) {
4+
for (let property in source) {
5+
if (typeof source[property] === "object" &&
6+
source[property] !== null) {
7+
destination[property] = destination[property] || {};
8+
deepExtend(destination[property], source[property]);
9+
} else {
10+
destination[property] = source[property];
11+
}
12+
}
13+
return destination;
14+
}
15+
16+
module.exports = deepExtend;

lib/validator.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use strict";
22

33
const flatten = require("./helpers/flatten");
4+
const deepExtend = require("./helpers/deep-extend");
45
const defaultMessages = require("./messages");
56

67
function loadRules() {
@@ -26,14 +27,14 @@ function loadRules() {
2627
* @param {Object} opts
2728
*/
2829
function Validator(opts = {}) {
29-
this.opts = Object.assign(opts, {
30+
this.opts = deepExtend({
3031
messages: defaultMessages
31-
});
32+
}, opts);
3233

3334
this.messages = this.opts.messages;
3435

3536
// Load rules
36-
this.rules = loadRules()
37+
this.rules = loadRules();
3738
}
3839

3940
/**

test/helpers/deep-extend.spec.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
2+
const deepExtend = require("../../lib/helpers/deep-extend");
3+
4+
describe("deepExtend", () => {
5+
it("should return a merged object", () => {
6+
const result = deepExtend({
7+
a: {
8+
b: 5,
9+
c: 6
10+
},
11+
d: true
12+
}, {
13+
a: {
14+
b: 10,
15+
e: "Hello"
16+
},
17+
f: "F",
18+
g: {
19+
h: "H"
20+
}
21+
});
22+
expect(result).toEqual({
23+
a: {
24+
b: 10,
25+
c: 6,
26+
e: "Hello"
27+
},
28+
d: true,
29+
f: "F",
30+
g: {
31+
h: "H"
32+
}
33+
});
34+
});
35+
});

test/helpers/flatten.spec.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

2-
const flatten = require('../../lib/helpers/flatten');
2+
const flatten = require("../../lib/helpers/flatten");
33

4-
describe('flatten', () => {
5-
it('should return a flat array', () => {
4+
describe("flatten", () => {
5+
it("should return a flat array", () => {
66
const result = flatten([0, [1, 1], 2, [3, 3, [4, [5, 6]], [[[[7]]], [8]], [9]], [10, [[11], 12]], 13]);
77
expect(result.length).toEqual(16);
88
expect(result).toEqual([0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]);

0 commit comments

Comments
 (0)