Skip to content

Commit 876579f

Browse files
Merge pull request #1 from eugene-matvejev/v0_1_0
init files and tests
2 parents 400d737 + 7d9db76 commit 876579f

File tree

3 files changed

+122
-0
lines changed

3 files changed

+122
-0
lines changed

package.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"name": "node-object-field-resolver",
3+
"version": "0.1.0",
4+
"description": "allows overwrite object fields with value",
5+
"main": "./src/overwrite_object_field_value.js",
6+
"repository": {
7+
"type": "git",
8+
"url": "git+https://github.com/explore-node-js/node.js-object-field-resolver.git"
9+
},
10+
"keywords": [
11+
"object field resolver, overwrite object fields"
12+
],
13+
"author": "Eugene Matvejev <eugene.matvejev@gmail.com>",
14+
"license": "MIT",
15+
"bugs": {
16+
"url": "https://github.com/explore-node-js/node.js-object-field-resolver/issues"
17+
},
18+
"homepage": "https://github.com/explore-node-js/node.js-object-field-resolver#readme",
19+
"dependencies": {},
20+
"devDependencies": {
21+
"jest": "^18.1.0"
22+
},
23+
"scripts": {
24+
"test": "node node_modules/jest/bin/jest.js --verbose"
25+
}
26+
}

src/overwrite_object_field_value.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
"use strict";
2+
3+
module.exports = function overwriteObjectFieldValue(abstractPath, value, object, delimiter) {
4+
delimiter = undefined !== delimiter ? delimiter : '.';
5+
6+
const indexes = abstractPath.split(delimiter);
7+
const lastPathIndex = indexes.length - 1;
8+
let obj = object;
9+
10+
for (let i = 0; i <= lastPathIndex; i++) {
11+
const index = indexes[i];
12+
13+
if (undefined === obj[index]) {
14+
obj[index] = {};
15+
}
16+
17+
if (i === lastPathIndex) {
18+
obj[index] = value;
19+
20+
break;
21+
}
22+
23+
obj = obj[index];
24+
}
25+
26+
return object;
27+
};
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
const overwriteObjectFieldValue = require("../src/overwrite_object_field_value");
2+
3+
describe(`resolver: object field`, () => {
4+
const dataProvider = [
5+
{
6+
absolutePath: 'node1',
7+
value: {},
8+
object: {},
9+
expected: { node1: {} }
10+
},
11+
{
12+
absolutePath: 'node1',
13+
value: {},
14+
object: { node1: ['test'] },
15+
expected: { node1: {} }
16+
},
17+
{
18+
absolutePath: 'node1',
19+
value: {},
20+
object: { node2: ['test'] },
21+
expected: { node2: ['test'], node1: {} }
22+
},
23+
{
24+
absolutePath: 'node1.node2',
25+
value: { value: 'test' },
26+
object: {},
27+
expected: { node1: { node2: { value: 'test' } } }
28+
},
29+
{
30+
absolutePath: 'node1.node2.node3',
31+
value: ['test'],
32+
object: {},
33+
expected: { node1: { node2: { node3: ['test'] } } }
34+
},
35+
{
36+
absolutePath: 'node1.node2.node3',
37+
value: ['test'],
38+
object: { node1: { node2: { node3: { node4: {} } } } },
39+
expected: { node1: { node2: { node3: ['test'] } } }
40+
},
41+
{
42+
absolutePath: 'node1.node2.node3.node4',
43+
value: 'string',
44+
object: { node4: { node2: { node3: { node4: '' } } } },
45+
expected: { node4: { node2: { node3: { node4: '' } } }, node1: { node2: { node3: { node4: 'string' } } } }
46+
}
47+
];
48+
const execute = (el) => {
49+
it(`::overwriteObjectFieldValue using: object - "${JSON.stringify(el.object)}" path - "${el.absolutePath}" delimiter - "${el.delimiter}"`, () => {
50+
const object = overwriteObjectFieldValue(el.absolutePath, el.value, el.object, el.delimiter);
51+
52+
expect(JSON.stringify(object)).toMatch(JSON.stringify(el.expected));
53+
});
54+
};
55+
56+
dataProvider
57+
/** tests where delimiter is undefined */
58+
.forEach(el => execute(el));
59+
60+
dataProvider
61+
/** tests where delimiter is defined */
62+
.map(el => {
63+
const delimiter = '/';
64+
el.absolutePath = el.absolutePath.replace(/\./g, delimiter);
65+
el.delimiter = delimiter;
66+
67+
return el;
68+
}).forEach(el => execute(el));
69+
});

0 commit comments

Comments
 (0)