Skip to content

Commit a5ea7d9

Browse files
committed
Added deep and shadow options on method dop.set
1 parent fde0522 commit a5ea7d9

File tree

5 files changed

+40
-5
lines changed

5 files changed

+40
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dop",
3-
"version": "0.25.2",
3+
"version": "0.26.0",
44
"main": "./dist/dop.nodejs.js",
55
"browser": "./dist/dop.js",
66
"unpkg": "./dist/dop.min.js",

src/api/set.js

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

2-
dop.set = function(object, property, value) {
2+
dop.set = function(object, property, value, options) {
33
// dop.util.invariant(dop.isRegistered(object), 'Object passed to dop.set must be a registered object');
44
(dop.isRegistered(object)) ?
5-
dop.core.set(object, property, value)
5+
dop.core.set(object, property, value, options)
66
:
77
object[property] = value;
88
return value;

src/core/mutators/set.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11

2-
dop.core.set = function(object, property, value) {
2+
dop.core.set = function(object, property, value, options) {
3+
4+
if (!isObject(options))
5+
options = {}
6+
7+
options.deep = typeof options.deep == 'boolean' ? options.deep : true
8+
options.shadow = typeof options.shadow == 'boolean' ? options.shadow : false
39

410
// If is a different value
511
if (object[property] !== value) {
@@ -19,7 +25,7 @@ dop.core.set = function(object, property, value) {
1925
// property = Number(property);
2026

2127
// object or array
22-
if (dop.isObjectRegistrable(value) && !(dop.isRegistered(value) && dop.getObjectParent(value) === objectProxy))
28+
if (options.deep && dop.isObjectRegistrable(value) && !(dop.isRegistered(value) && dop.getObjectParent(value) === objectProxy))
2329
objectTarget[property] = dop.core.configureObject(value, property, objectProxy);
2430
// computed value
2531
else if (isFunction(value) && value._name==dop.cons.COMPUTED_FUNCTION)
@@ -29,6 +35,7 @@ dop.core.set = function(object, property, value) {
2935
objectTarget[property] = value;
3036

3137
if (
38+
!options.shadow &&
3239
(objectTarget===objectProxy || object===objectProxy) &&
3340
!(isFunction(oldValue) && isFunction(value)) &&
3441
(path = dop.getObjectPath(object))

test/collectors.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,16 @@ test('Emit', function(t) {
122122
t.equal(collector.mutations.length, 0);
123123
t.end();
124124
});
125+
126+
127+
128+
129+
test('Testing shadow option on set', function(t) {
130+
var collector = dop.collect();
131+
dop.set(object, 'noshadow', [2,3,4])
132+
dop.set(object, 'shadow', [2,3,4], {shadow:true})
133+
t.equal(collector.mutations.length, 1);
134+
t.deepEqual(object.noshadow, object.shadow);
135+
collector.destroy();
136+
t.end();
137+
});

test/sets_dels.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,18 @@ test('Update a property freeze return same value and dont change property', func
186186
t.equal(object.new, 'newsealvalue');
187187
t.end();
188188
});
189+
190+
191+
192+
193+
194+
195+
test('set() deep option', function(t) {
196+
var object = dop.register({})
197+
set(object, 'deep', {a:1,b:{e:true}})
198+
set(object, 'nodeep', {a:1,b:{e:true}}, {deep:false})
199+
t.equal(dop.isRegistered(object.deep), true)
200+
t.equal(dop.isRegistered(object.nodeep), false)
201+
t.deepEqual(object.deep, object.nodeep)
202+
t.end();
203+
});

0 commit comments

Comments
 (0)