Skip to content

Commit 1694684

Browse files
committed
Updated observeApi
1 parent e545b2b commit 1694684

File tree

6 files changed

+188
-218
lines changed

6 files changed

+188
-218
lines changed

src/core/constructors/observer.js

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,25 @@ dop.core.observer = function Observer(callback, id) {
66
this.observers_all = {} // need it for destroy()
77
}
88

9-
dop.core.observer.prototype.observe = function(object, property) {
9+
dop.core.observer.prototype.observeProperty = function(object, property) {
10+
var path = observerCheckObject(object, 'observeProperty')
1011
dop.util.invariant(
11-
dop.isRegistered(object),
12-
'observer.observe() needs a registered object as first parameter'
12+
arguments.length === 2,
13+
'observer.observeProperty() You must pass a name property as second parameter'
1314
)
14-
var path = dop.getObjectPath(object)
15-
dop.util.invariant(
16-
isArray(path),
17-
'observer.observe() The object you are passing is not allocated to a registered object'
15+
return this.observe(
16+
dop.core.getPathId(path) + dop.core.pathSeparator(property),
17+
'observers_prop'
1818
)
19+
}
1920

20-
var path_id = dop.core.getPathId(path),
21-
type = 'observers'
22-
23-
// is observeProperty
24-
if (arguments.length === 2) {
25-
path_id += dop.core.pathSeparator(property)
26-
type = 'observers_prop'
27-
}
28-
29-
return this.observe(path_id, type)
21+
dop.core.observer.prototype.observeObject = function(object) {
22+
var path = observerCheckObject(object, 'observeObject')
23+
return this.observe(dop.core.getPathId(path), 'observers')
3024
}
3125

3226
dop.core.observer.prototype.observeAll = function(object) {
33-
dop.util.invariant(
34-
dop.isRegistered(object),
35-
'observer.observeAll() needs a registered object as first parameter'
36-
)
37-
var path = dop.getObjectPath(object)
38-
dop.util.invariant(
39-
isArray(path),
40-
'observer.observeAll() The object you are passing is not allocated to a registered object'
41-
)
42-
27+
var path = observerCheckObject(object, 'observeAll')
4328
return this.observe(dop.core.getPathId(path), 'observers_all')
4429
}
4530

@@ -70,3 +55,18 @@ dop.core.observer.prototype.destroy = function() {
7055
for (path_id in this.observers_prop)
7156
delete data_path[path_id].observers_prop[this.id]
7257
}
58+
59+
function observerCheckObject(object, method) {
60+
dop.util.invariant(
61+
dop.isRegistered(object),
62+
'observer.' + method + '() needs a registered object as first parameter'
63+
)
64+
var path = dop.getObjectPath(object)
65+
dop.util.invariant(
66+
isArray(path),
67+
'observer.' +
68+
method +
69+
'() The object you are passing is not allocated to a registered object'
70+
)
71+
return path
72+
}

test/interceptors.js

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,45 @@
1-
var test = require('tape');
1+
var test = require('tape')
22
// require('tabe').createStream( test );
33
dop = require('./.proxy').create()
44
var set = dop.set
55

6-
7-
8-
var object = dop.register({name:'Enzo'});
9-
10-
6+
var object = dop.register({ name: 'Enzo' })
117

128
test('Passing wrong arguments', function(t) {
13-
14-
var disposer;
15-
try {disposer = dop.intercept()}
16-
catch(e){t.equal(e.message.indexOf('needs a registered object')>-1,true, e.message)}
17-
18-
try {disposer = dop.intercept(object)}
19-
catch(e){t.equal(e.message.indexOf('needs a callback')>-1,true, e.message)}
20-
21-
try {disposer = dop.intercept(object, 'name')}
22-
catch(e){t.equal(e.message.indexOf('needs a callback')>-1,true, e.message)}
23-
24-
var disposer = dop.intercept(object, function(){})
9+
var disposer
10+
try {
11+
disposer = dop.intercept()
12+
} catch (e) {
13+
t.equal(
14+
e.message.indexOf('needs a registered object') > -1,
15+
true,
16+
e.message
17+
)
18+
}
19+
20+
try {
21+
disposer = dop.intercept(object)
22+
} catch (e) {
23+
t.equal(e.message.indexOf('needs a callback') > -1, true, e.message)
24+
}
25+
26+
try {
27+
disposer = dop.intercept(object, 'name')
28+
} catch (e) {
29+
t.equal(e.message.indexOf('needs a callback') > -1, true, e.message)
30+
}
31+
32+
var disposer = dop.intercept(object, function() {})
2533
t.equal(typeof disposer, 'function')
2634
disposer()
27-
28-
disposer = dop.intercept(object, 'name', function(){})
35+
36+
disposer = dop.intercept(object, 'name', function() {})
2937
t.equal(typeof disposer, 'function')
3038
disposer()
3139

32-
t.end();
40+
t.end()
3341
})
3442

35-
36-
3743
test('Multiple interceptors', function(t) {
3844
var inc = 1
3945
var disposer1 = dop.intercept(object, 'name', function(mutation) {
@@ -49,20 +55,17 @@ test('Multiple interceptors', function(t) {
4955
return true
5056
})
5157
var observer = dop.createObserver(function(mutation) {
52-
disposer1();
53-
disposer2();
54-
disposer3();
58+
disposer1()
59+
disposer2()
60+
disposer3()
5561
observer.destroy()
5662
t.equal(inc++, 4, 'observer')
57-
t.end();
63+
t.end()
5864
})
59-
observer.observe(object, 'name')
65+
observer.observeProperty(object, 'name')
6066
set(object, 'name', 'John')
6167
})
6268

63-
64-
65-
6669
test('Second interceptor do not return true', function(t) {
6770
var inc = 1
6871
var disposer1 = dop.intercept(object, function(mutation) {
@@ -71,13 +74,13 @@ test('Second interceptor do not return true', function(t) {
7174
})
7275
var disposer2 = dop.intercept(object, 'name', function(mutation) {
7376
disposer1()
74-
disposer2();
77+
disposer2()
7578
t.equal(inc++, 2)
76-
t.end();
79+
t.end()
7780
})
7881
var observer = dop.createObserver(function(mutation) {
79-
t.end(false,true, 'this shouldnt happen')
82+
t.end(false, true, 'this shouldnt happen')
8083
})
81-
observer.observe(object, 'name')
84+
observer.observeProperty(object, 'name')
8285
set(object, 'name', 'Josema')
8386
})

0 commit comments

Comments
 (0)