22
33/* jshint newcap: false */
44/* global headersGetter: true,
5+ mergeHeaders: true,
56 arrIndexOf: true,
67 isFile: true,
78 isBlob: true
@@ -26,9 +27,9 @@ function $sails($sailsInterceptorProvider, $sailsIoProvider) {
2627 } ;
2728
2829 provider . defaults = {
29- transformResponse : [ ] ,
30- transformRequest : [ ] ,
31- headers : { } // TODO: default headers
30+ transformResponse : [ ] ,
31+ transformRequest : [ ] ,
32+ headers : { } // TODO: what should the default default headers
3233 } ;
3334
3435 provider . interceptors = $sailsInterceptorProvider . interceptors = [
@@ -42,17 +43,17 @@ function $sails($sailsInterceptorProvider, $sailsIoProvider) {
4243 }*/
4344 ] ;
4445
45- this . $get = function ( $q , $log , $timeout , $sailsIo , $sailsInterceptor ) {
46+ this . $get = function ( $rootScope , $ q, $log , $timeout , $sailsIo , $sailsInterceptor ) {
4647 var socket = new $sailsIo ( provider . socket || provider . url , provider . config ) ;
47- var socketFunctions = [ 'connect' , 'disconnect' , 'isConnected' ] ;
48+ var socketFunctions = [ 'connect' , 'disconnect' , 'isConnected' ] ;
4849
4950 function $sails ( config ) {
5051 return $sails [ config . method ] ( config . url , config ) ;
5152 }
5253
5354 $sails . _socket = socket ;
5455
55- function exposeSocketFunction ( fnName ) {
56+ function exposeSocketFunction ( fnName ) {
5657 $sails [ fnName ] = socket [ fnName ] . bind ( socket ) ;
5758 }
5859
@@ -62,8 +63,7 @@ function $sails($sailsInterceptorProvider, $sailsIoProvider) {
6263 var config = {
6364 method : methodName ,
6465 transformRequest : provider . defaults . transformRequest ,
65- transformResponse : provider . defaults . transformResponse ,
66- headers : { } // TODO: default headers
66+ transformResponse : provider . defaults . transformResponse
6767 } ;
6868
6969 requestConfig = requestConfig || { } ;
@@ -76,9 +76,14 @@ function $sails($sailsInterceptorProvider, $sailsIoProvider) {
7676 requestConfig . data = data ;
7777 }
7878
79- angular . extend ( config , requestConfig ) ;
79+ config = angular . extend ( { } , config , requestConfig ) ;
80+ config . headers = mergeHeaders ( requestConfig , provider . defaults . headers ) ;
8081 config . url = ( provider . urlPrefix || '' ) + ( url || config . url ) ;
81- config . method = ( config . method || methodName ) . toUpperCase ( ) ;
82+ config . method = angular . uppercase ( config . method || methodName ) ;
83+
84+ if ( angular . isUndefined ( config . withCredentials ) && ! angular . isUndefined ( provider . defaults . withCredentials ) ) {
85+ config . withCredentials = provider . defaults . withCredentials ;
86+ }
8287
8388 var promise = $sailsInterceptor ( socket [ methodName ] . bind ( socket ) , config ) ;
8489
@@ -113,56 +118,62 @@ function $sails($sailsInterceptorProvider, $sailsIoProvider) {
113118 * Update a model on sails pushes
114119 * @param {String } name Sails model name
115120 * @param {Array } models Array with model objects
121+ * @returns {Function } Function to remove the model updater instance
116122 */
117123 $sails . $modelUpdater = function ( name , models ) {
118124
119- socket . on ( name , function ( message ) {
120- var i ;
125+ var update = function ( message ) {
121126
122- if ( provider . debug ) {
123- $log . info ( '$sails ' + name + ' model ' + message . verb + ' id: ' + message . id , message . data ) ;
124- }
127+ $rootScope . $evalAsync ( function ( ) {
128+ var i ;
125129
126- switch ( message . verb ) {
130+ switch ( message . verb ) {
127131
128- case "created" :
129- // create new model item
130- models . push ( message . data ) ;
131- break ;
132+ case "created" :
133+ // create new model item
134+ models . push ( message . data ) ;
135+ break ;
132136
133- case "updated" :
134- var obj ;
135- for ( i = 0 ; i < models . length ; i ++ ) {
136- if ( models [ i ] . id === message . id ) {
137- obj = models [ i ] ;
138- break ;
137+ case "updated" :
138+ var obj ;
139+ for ( i = 0 ; i < models . length ; i ++ ) {
140+ if ( models [ i ] . id === message . id ) {
141+ obj = models [ i ] ;
142+ break ;
143+ }
139144 }
140- }
141-
142- // cant update if the angular-model does not have the item and the
143- // sails message does not give us the previous record
144- if ( ! obj && ! message . previous ) return ;
145-
146- if ( ! obj ) {
147- // sails has given us the previous record, create it in our model
148- obj = message . previous ;
149- models . push ( obj ) ;
150- }
151-
152- // update the model item
153- angular . extend ( obj , message . data ) ;
154- break ;
155-
156- case "destroyed" :
157- for ( i = 0 ; i < models . length ; i ++ ) {
158- if ( models [ i ] . id === message . id ) {
159- models . splice ( i , 1 ) ;
160- break ;
145+
146+ // cant update if the angular-model does not have the item and the
147+ // sails message does not give us the previous record
148+ if ( ! obj && ! message . previous ) return ;
149+
150+ if ( ! obj ) {
151+ // sails has given us the previous record, create it in our model
152+ obj = message . previous ;
153+ models . push ( obj ) ;
161154 }
162- }
163- break ;
164- }
165- } ) ;
155+
156+ // update the model item
157+ angular . extend ( obj , message . data ) ;
158+ break ;
159+
160+ case "destroyed" :
161+ for ( i = 0 ; i < models . length ; i ++ ) {
162+ if ( models [ i ] . id === message . id ) {
163+ models . splice ( i , 1 ) ;
164+ break ;
165+ }
166+ }
167+ break ;
168+ }
169+ } ) ;
170+ } ;
171+
172+ socket . _socket . on ( name , update ) ;
173+
174+ return function ( ) {
175+ socket . _socket . off ( name , update ) ;
176+ } ;
166177 } ;
167178
168179 $sails . defaults = this . defaults ;
0 commit comments