AngularJS code snippet for Interview
//
// Explain how this works!
//
// e.g. var Book = parse.forClass("Book");
// var book = Book.get(123);
//
angular
.module( "services",[] )
.factory( 'parse', function($rootScope, $http, $log){
function buildRequestURL(className, objectId) {
var url = "http://services.mysite.com/classes/"+className;
if ( objectId )
url = url + "/" + objectId;
return url;
}
var onSuccess = function( callback, logMsg ) {
return function (response) {
$log.log( logMsg || "" );
$rootScope.$apply( function() {
callback(null, response);
});
return response;
};
},
onError = function( callback, defaultErrMsg ) {
return function (response) {
$rootScope.$apply( function() {
callback(response.error || defaultErrMsg );
});
return response;
};
},
createFn = function( data, callback) {
return $http.post(
buildRequestURL(className),
data,
{ headers: parseHeaders }
)
.then(
onSuccess(callback),
onError(callback,"Cannot submit data!")
);
},
getFn = function(objectId, callback) {
return $http.get(
buildRequestURL(className,objectId),
{ headers: parseHeaders }s
)
.then(
onSuccess(callback),
onError(callback, "Cannot get object "+className+"/"+objectId+"!" )
);
},
queryFn = function( query, callback) {
var config = { headers: parseHeaders };
if (query) config.params = { where: query };
return $http.get(
buildRequestURL(className),
config
)
.then(
onSuccess(callback),
onError(callback, "Could not query "+className+"!" )
);
},
removeFn = function( objectId, callback) {
return $http['delete']( //['delete'] to get around using delete js keyword
buildRequestURL(className,objectId),
{ headers: parseHeaders }
)
.then(
onSuccess(callback),
onError(callback, "Cannot delete object "+className+"/"+objectId+"!" )
);
};
return {
forClass : function( className ) {
return {
create : createFn,
get : getFn,
query : queryFn,
remove : removeFn
};
}
};
});