@@ -7,38 +7,41 @@ dop.protocol._onsubscribe = function(node, request_id, request, response) {
77 request . promise . reject ( dop . core . getRejectError ( response [ 0 ] ) ) ;
88
99 else {
10- var object_path = typeof response [ 1 ] == 'number' ? [ response [ 1 ] ] : response [ 1 ] ,
11- object_owner_id = object_path [ 0 ] ,
10+ var object_owner_id = response [ 1 ] ,
1211 object_owner = response [ 2 ] ,
12+ object_path = isArray ( object_owner ) ? object_owner : [ ] ,
1313 object , collector ;
14-
15- if ( ! isArray ( object_path ) || typeof object_owner_id != 'number' )
16- request . promise . reject ( dop . core . error . reject_local . OBJECT_NOT_FOUND ) ;
1714
18- else {
19- if ( node . owner [ object_owner_id ] === undefined ) {
20- collector = dop . collect ( ) ;
21- if ( dop . isRegistered ( request . into ) )
22- object = dop . core . setPatch ( request . into , object_owner , dop . core . setPatchFunctionMutator ) ;
23- else
24- object = dop . register ( ( request . into === undefined ) ?
25- object_owner
26- :
27- dop . core . setPatch ( request . into , object_owner , dop . core . setPatchMutator )
28- ) ;
29- dop . core . registerOwner ( node , object , object_owner_id ) ;
30- collector . emit ( ) ;
31- }
32- else
33- object = dop . data . object [ node . owner [ object_owner_id ] ] . object ;
15+ // New object
16+ if ( node . owner [ object_owner_id ] === undefined ) {
3417
35- object = dop . util . get ( object , object_path . slice ( 1 ) ) ;
36-
37- if ( ! isObject ( object ) )
18+ // If is new object and third parameter is an array we must reject
19+ if ( object_owner === object_path )
3820 request . promise . reject ( dop . core . error . reject_local . OBJECT_NOT_FOUND ) ;
21+
22+ collector = dop . collect ( ) ;
23+ if ( dop . isRegistered ( request . into ) )
24+ object = dop . core . setPatch ( request . into , object_owner , dop . core . setPatchFunctionMutator ) ;
3925 else
40- request . promise . resolve ( dop . getObjectProxy ( object ) ) ;
26+ object = dop . register ( ( request . into === undefined ) ?
27+ object_owner
28+ :
29+ dop . core . setPatch ( request . into , object_owner , dop . core . setPatchMutator )
30+ ) ;
31+ dop . core . registerOwner ( node , object , object_owner_id ) ;
32+ collector . emit ( ) ;
4133 }
34+ // Already registered
35+ else
36+ object = dop . data . object [ node . owner [ object_owner_id ] ] . object ;
37+
38+ object = dop . util . get ( object , object_path ) ;
39+
40+ if ( ! isObject ( object ) )
41+ request . promise . reject ( dop . core . error . reject_local . OBJECT_NOT_FOUND ) ;
42+ else
43+ request . promise . resolve ( dop . getObjectProxy ( object ) ) ;
44+
4245 }
4346 }
4447} ;
0 commit comments