SC.RailsDataSource = SC.DataSource.extend( {
fetch: function(store, fetchKey, params) {
//Todos.inspectController.inspect(fetchKey, 2);
var ret = [], url;
var action={};
if (params) {
var r = SC.Request.getUrl('tasks'+"?"+params).set('isJSON', YES);
} else {
var r = SC.Request.getUrl('tasks').set('isJSON', YES);
}
r.notify(this, this.fetchDidComplete,
{
store: store,
fetchKey: fetchKey ,
storeKeyArray: ret
}
).send();
return ret;
},
fetchDidComplete: function(r, params) {
var hashes= [], storeKeys= [], store, fetchKey, ret, primaryKey,
response, results, lenresults, idx;
response = r.response();
if (response.rails_auth_token_name) {
SC.RAILS_AUTH_TOKEN_NAME = response.rails_auth_token_name;
SC.RAILS_AUTH_TOKEN = response.rails_auth_token;
}
if (response.kindOf ? response.kindOf(SC.Error) : false) {
this.requestDidError(r);
} else {
fetchKey = params.fetchKey;
storeKeys = params.store.loadRecords(fetchKey, response.content);
params.storeKeyArray.replace(0,0,storeKeys);
}
return YES;
},
requestDidError: function(r) {
var pane = SC.AlertPane.error("There has been an error with your request",
r.get('rawResponse').toString(), '', "OK", "Cancel", this);
return YES;
},
retrieveRecord: function(store, storeKey) {
var ret = [], url, action={},
recordType = SC.Store.recordTypeFor(storeKey),
id = recordType.idFor(storeKey);
url='tasks'+'/'+id;
var r = SC.Request.getUrl(url).set('isJSON', YES);
r.notify(this, this.retrieveRecordDidComplete,
{ store: store, storeKey: storeKey,id:id }
).send();
this.cancelStoreKeys[storeKey]=[].push(r);
return ret;
},
retrieveRecordDidComplete: function(r,params) {
var response, results, storeKeys = [], hashes = [];
response = r.response();
if (response.kindOf ? response.kindOf(SC.Error) : false) {
this.requestDidError(r);
} else {
results = response.content;
storeKeys.push(params.storeKey);
params.store.dataSourceDidComplete(params.storeKey, results, params.id);
this.cancelStoreKeys[params.storeKey]=null;
params.storeKeyArray.replace(0,0,storeKeys);
}
return YES;
},
createRecord: function(store, storeKey) {
var dataHash = store.readDataHash(storeKey),
obj={"content":dataHash};
var r = SC.Request.postUrl('tasks').set('isJSON', YES);
r.notify(this, this.createRecordDidComplete, {
store: store, storeKey: storeKey
}).send(obj);
this.cancelStoreKeys[storeKey]=[].push(r);
return YES ;
},
createRecordDidComplete: function(r, params) {
var response, results, guid;
response = r.response();
if(response.kindOf ? response.kindOf(SC.Error) : false) {
this.requestDidError(r);
} else {
results = response.content;
guid=results.guid;
params.store.dataSourceDidComplete(params.storeKey, results, guid);
this.cancelStoreKeys[params.storeKey]=null;
}
return YES;
},
updateRecord: function(store, storeKey) {
var id = store.idFor(storeKey),
dataHash = store.readDataHash(storeKey),
obj={"content":dataHash};
var url = 'tasks'+'/'+id;
var r = SC.Request.putUrl(url).set('isJSON', YES);
r.notify(this, this.updateRecordDidComplete, {
store: store, storeKey: storeKey, id:id
}).send(obj);
this.cancelStoreKeys[storeKey]=[].push(r);
return YES ;
},
updateRecordDidComplete: function(r, params) {
var response, results;
response = r.response();
if(response.kindOf ? response.kindOf(SC.Error) : false) {
this.requestDidError(r);
} else {
results = response.content;
params.store.dataSourceDidComplete(params.storeKey, results, params.id);
this.cancelStoreKeys[params.storeKey]=null;
}
return YES;
},
destroyRecord: function(store, storeKey) {
var id = store.idFor(storeKey);
var r = SC.Request.deleteUrl("").set('isJSON', YES);
if(!id) return YES;
r.set('address',id);
r.notify(this, this.destroyRecordDidComplete, {
store: store, storeKey: storeKey
}).send();
this.cancelStoreKeys[storeKey]=[].push(r);
return YES ;
},
destroyRecordDidComplete: function(r, params) {
var response = r.response();
if(response.kindOf ? response.kindOf(SC.Error) : false) {
this.requestDidError(r);
} else {
params.store.dataSourceDidDestroy(params.storeKey);
this.cancelStoreKeys[params.storeKey]=null;
}
return YES;
},
cancel: function(store, storeKeys) {
return NO;
},
/** @private */
_appendQueryString: function(url, params) {
var name, queryString = [] ;
for (name in params) {
if (params.hasOwnProperty(name)) {
queryString.push("%@=%@".fmt(name,params[name]));
}
}
return [url, queryString.join('&')].join('?') ;
},
_response: function(request, userData) {
var json = request.get('response') ;
Refresher.processJson(json, {
query: userData.query
});
}
});