/** * angular-rest-service * @version v0.0.6 - 2014-09-22 * @link https://github.com/aronvaughan/angular-rest-service * @author <> * @license MIT License, http://www.opensource.org/licenses/MIT */ "use strict";var DateUtils=function(){this.parseISO8601=function(a){var b=a.split("T"),c=b[0].split("-"),d=b[1].split("Z"),e=d[0].split(":"),f=e[2].split("."),g=Number(e[0]),h=new Date;return h.setUTCFullYear(Number(c[0])),h.setUTCMonth(Number(c[1])-1),h.setUTCDate(Number(c[2])),h.setUTCHours(Number(g)),h.setUTCMinutes(Number(e[1])),h.setUTCSeconds(Number(f[0])),f[1]&&h.setUTCMilliseconds(Number(f[1])),h}},RequireUtils=function(a,b){if(this.logger=a,this.servicename=b,void 0===this.servicename)throw"RequireUtils - servicename not defined!!!!";if(void 0===this.logger)throw"RequireUtils - logger is undefined!!!";this.checkDependencies=function(a,b){for(var c=0;c<a.length;c++)if(void 0!==a&&a.length>0){if(void 0===b[a[c]])throw this.logger.error("RequireUtils requirement: "+a[c]+" was not found in dependencies: ",b),alert(JSON.stringify(a[c])),"RequireUtils requirement: "+a[c]+" was not found in dependencies: "+b.toJSON;this.logger.debug(this.servicename+", found requirement: ",a[c])}this.logger.debug(this.servicename+", dependencies resolved")}},RequirementsBase={requirements:void 0,dependencies:void 0,baseMergeRequirements:function(a,b){this.requirements=void 0!==b&&b.length>0?_.union(a,b):a},baseSetDependencies:function(a){this.dependencies=a;for(var b in a)this[b]=a[b]}},FactoryBase=_.extend({},RequirementsBase,{name:"FACTORY",service:void 0,baseRequirements:["avLog","serviceName","mockDataImpl","realDataImpl","serviceImpl"],mockMode:!1,baseInitialize:function(a,b){this.logger=a.avLog.getLogger(a.serviceName),this.dependencyUtil=new RequireUtils(this.logger,a.serviceName),this.baseSetDependencies(a),this.baseMergeRequirements(this.baseRequirements,b),this.dependencyUtil.checkDependencies(this.requirements,this.dependencies)},create:function(){if(this.logger.debug("FACTORY initializing "+this.serviceName),void 0===this.service){var a;this.mockMode?(this.logger.debug("FACTORY "+this.serviceName+" in mock mode"),a=this.mockDataImpl,a.initialize(this.dependencies)):(this.logger.debug("FACTORY "+this.serviceName+" in real mode"),a=this.realDataImpl,a.initialize(this.dependencies)),this.service=this.serviceImpl,this.dataImpl=a,this.dependencies.serviceRemote=a,this.service.initialize(this.dependencies)}return this.service}}),ServiceBase=_.extend({},RequirementsBase,{name:"SERVICE",serviceName:void 0,logger:void 0,eventChannel:void 0,$rootScope:void 0,serviceRemote:void 0,$resource:void 0,self:void 0,baseRequirements:["avLog","serviceName","eventChannel","$rootScope","serviceRemote","$resource"],customInitialize:!1,baseInitialize:function(a,b){this.logger=a.avLog.getLogger(a.serviceName),this.dependencyUtil=new RequireUtils(this.logger,a.serviceName),this.baseSetDependencies(a),this.baseMergeRequirements(this.baseRequirements,b),this.dependencyUtil.checkDependencies(this.requirements,this.dependencies),this.self=this,this.customInitialize&&(this.logger.debug("running custom initialize"),this.customInitialize(a,b))},getAll:function(a,b,c){return this.logger.debug(this.serviceName+" SERVICE, get all from remote impl",a),this.collection=this.serviceRemote.getAll(a,b,c),this.logger.debug(this.serviceName+" SERVICE, get all",this.collection),this.collection},get:function(a,b,c){return this.logger.debug(this.serviceName+" SERVICE, get from remote impl ",a),this.instance=this.serviceRemote.get(a,b,c),this.instance},save:function(a,b,c,d){this.logger.debug(this.serviceName+" SERVICE, save ",a),this.logger.debug(this.serviceName+" SERVICE, save params ",b);var e=this.serviceRemote.save(a,b,c,d);return e},"delete":function(a,b,c,d){this.logger.debug(this.serviceName+" SERVICE, delete ",[a,b]),this.serviceRemote.delete(a,b,c,d)}}),MockServiceImplBase=_.extend({},RequirementsBase,{name:"MOCK",serviceName:void 0,logger:void 0,mockData:void 0,baseRequirements:["avLog","serviceName","mockData"],self:void 0,dependencies:{},customInitialize:!1,baseInitialize:function(a,b){this.logger=a.avLog.getLogger(a.serviceName),this.dependencyUtil=new RequireUtils(this.logger,a.serviceName),this.baseSetDependencies(a),this.baseMergeRequirements(this.baseRequirements,b),this.dependencyUtil.checkDependencies(this.requirements,this.dependencies),this.self=this,this.customInitialize&&(this.logger.debug("running custom initialize"),this.customInitialize(a,b))},getAll:function(a,b,c){if(this.logger.debug(this.serviceName+" MOCK, mock get all, length: "+a.length,a),a&&Object.keys(a).length>0){var d=[];for(var e in this.mockData)for(var f in a)if(this.logger.debug(" MOCK get all filtering by param: "+f+" mockData param:"+this.mockData[f]+"filter by: "+a[f]),""+this.mockData[e][f]==""+a[f]){d.push(this.mockData[e]);break}return b&&b(d),this.logger.debug("failure func",c),d}return b&&b(this.mockData),this.logger.debug("failure func",c),this.mockData},get:function(a,b,c){if(this.logger.debug(this.serviceName+" MOCK, mock get ",a.id),void 0!==a.id){var d=this.findIndexInMock(a.id);return b&&b(this.mockData[d]),this.logger.debug("failure func",c),this.mockData[d]}},save:function(a,b,c,d){var e=this.findIndexInMock(a.id);return this.logger.debug(this.serviceName+" MOCK, mock saving",[e,a.id,"params",b]),0>e?(this.logger.debug(this.serviceName+" MOCK, mock new for save!!!"),e=this.mockData.length,a.id=""+e,this.mockData.push(a)):this.mockData[e]=a,this.afterSave&&this.afterSave(e,a),c&&c(a),this.logger.debug("failure func",d),a},"delete":function(a,b,c,d){var e=this.findIndexInMock(a);this.logger.debug(this.serviceName+" MOCK, mock delete ",e,a),this.mockData.splice(e,1),c&&c(),this.logger.debug("failure func",d)},findIndexInMock:function(a){console.log("findIndexInMock",a,this.mockData);for(var b=0;b<this.mockData.length;b++)if(console.log("mock id ",this.mockData[b].id,a),this.mockData[b].id===a)return console.log("found at ",b,this.mockData[b]),b;return-1}}),DataServiceBase=_.extend({},RequirementsBase,{name:"REAL",resourceUrl:void 0,resource:void 0,serviceName:void 0,logger:void 0,self:void 0,baseRequirements:["avLog","serviceName","$resource","resourceUrl","eventChannel","$rootScope"],customInitialize:!1,baseInitialize:function(a,b){this.logger=a.avLog.getLogger(a.serviceName),this.dependencyUtil=new RequireUtils(this.logger,a.serviceName),this.baseSetDependencies(a),this.baseMergeRequirements(this.baseRequirements,b),this.dependencyUtil.checkDependencies(this.requirements,this.dependencies),this.resource=this.$resource(this.resourceUrl,null,{update:{method:"PUT"}}),this.self=this,this.customInitialize&&(this.logger.debug("running custom initialize"),this.customInitialize(a,b))},getAll:function(a,b,c){this.logger.debug(this.serviceName+" REAL, get all called",a);var d=this,e=this.resource.query(a,function(a,c){d.logger.debug(d.serviceName+" REAL, base getAll success callback: ",a),d.logger.debug(d.serviceName+" REAL should call onGetAllSuccess?",d.onGetAllSuccess),d.onGetAllSuccess&&d.onGetAllSuccess(a,c),d.$rootScope.$broadcast("SERVICE."+d.eventChannel+".UPDATED.ALL",a),d.logger.debug("sending event: get all success SERVICE."+d.eventChannel+".GETALL.SUCESS",[a,c]),d.$rootScope.$broadcast("SERVICE."+d.eventChannel+".GETALL.SUCCESS",a),b&&b(a,c)},function(a){d.logger.debug("sending event: get all fail SERVICE."+d.eventChannel+".GETALL.FAIL",[a]),d.$rootScope.$broadcast("SERVICE."+d.eventChannel+".GETALL.FAIL",a),c&&c(a)});return this.logger.debug(this.serviceName+" REAL, get all:",e),e},get:function(a,b,c){if(this.logger.debug(this.serviceName+" REAL, get from remote",a),void 0===a||void 0===a.id)return void this.logger.debug(this.serviceName+" REAL, get id was null, no-op");var d=this;return this.single=this.resource.get(a,function(a,c){d.logger.debug(" REAL success: "+a),d.logger.debug(" REAL should call onGetSuccess?",d.onGetSuccess),d.onGetSuccess&&d.onGetSuccess(a,c),d.logger.debug("sending event: get success SERVICE."+d.eventChannel+".GET.SUCESS",[a,c]),d.$rootScope.$broadcast("SERVICE."+d.eventChannel+".GET.SUCCESS",a),b&&b(a,c)},function(a){d.logger.debug("sending event: get fail SERVICE."+d.eventChannel+".GET.FAIL",[a]),d.$rootScope.$broadcast("SERVICE."+d.eventChannel+".GET.FAIL",a),c&&c(a)}),this.logger.debug(" REAL, get got instance",this.single),this.single},save:function(a,b,c,d){this.logger.debug(this.serviceName+" REAL, doing save",a),this.logger.debug(this.serviceName+" REAL, doing save params ",b);var e,f=this;console.log("REAL, doing save",b);for(var g in b)this.logger.debug(" REAL save param: "+g,b[g]),a[g]=b[g];return this.logger.debug(this.serviceName+" REAL, after applied params ",a),void 0===a.id?(console.log("REAL, doing POST (create)",b,a),this.logger.debug(this.serviceName+" REAL, doing POST (create)",[b,a]),e=this.resource.save(b,a,function(a,b){f.logger.debug("sending event: save success SERVICE."+f.eventChannel+".SAVE.SUCESS",[a,b]),f.$rootScope.$broadcast("SERVICE."+f.eventChannel+".SAVE.SUCCESS",a,b),c&&c(a,b)},function(a){f.logger.debug("sending event: update fail SERVICE."+f.eventChannel+".UPDATE.FAIL",[a]),f.$rootScope.$broadcast("SERVICE."+f.eventChannel+".SAVE.FAIL",a),d&&d(a)}),console.log("REAL, response ",e)):(this.logger.debug(this.serviceName+" REAL, doing PUT (update)",a),e=this.resource.update({id:a.id},a,function(a,b){f.logger.debug("sending event: update success SERVICE."+f.eventChannel+".UPDATE.SUCESS",[a,b]),f.$rootScope.$broadcast("SERVICE."+f.eventChannel+".UPDATE.SUCCESS",a,b),c&&c(a,b)},function(a){f.logger.debug("sending event: update fail SERVICE."+f.eventChannel+".UPDATE.FAIL",[a]),f.$rootScope.$broadcast("SERVICE."+f.eventChannel+".UPDATE.FAIL",a),d&&d(a)})),this.logger.debug(this.serviceName+" REAL, save response from server: ",e),e},"delete":function(a,b,c,d){this.logger.debug(this.serviceName+" REAL, delete",[a,b]);var e=this,f={id:a};for(var g in b)this.logger.debug(" REAL delete param: "+g,b[g]),f[g]=b[g];var h=this.resource.delete(f,function(a,b){e.logger.debug("sending event: delete success SERVICE."+e.eventChannel+".DELETE.SUCCESS",[e.$rootScope,e.eventChannel,a,b]),e.$rootScope.$broadcast("SERVICE."+e.eventChannel+".DELETE.SUCCESS",a,b),c&&c(a,b)},function(a){e.logger.debug("sending event: delete fail SERVICE."+e.eventChannel+".DELETE.FAIL",[a]),e.$rootScope.$broadcast("SERVICE."+e.eventChannel+".DELETE.FAIL",a),d&&d(a)});return h}}),ServiceContainer={service:void 0,serviceFactory:void 0,mockImpl:void 0,realImpl:void 0,initialize:function(a){return this.mockImpl=_.extend({},MockServiceImplBase,{mockData:a.mockData,initialize:function(b){var c=a.serviceRequirements;b.serviceName=a.serviceName,b.mockData=this.mockData,this.baseInitialize(b,c)}},a.mockExtend),a.mockDataImpl=this.mockImpl,this.realImpl=_.extend({},DataServiceBase,{initialize:function(b){b.resourceUrl=a.resourceUrl,b.serviceName=a.serviceName,this.baseInitialize(b,{})}},a.realExtend),a.realDataImpl=this.realImpl,this.service=_.extend({},ServiceBase,{dateUtils:new DateUtils,initialize:function(b){var c=a.serviceRequirements;b.serviceName=a.serviceName,this.baseInitialize(b,c)}},a.serviceExtend),a.serviceImpl=this.service,this.serviceFactory=_.extend({},FactoryBase,{initialize:function(b){b.serviceName=a.serviceName,this.baseInitialize(b,{})}},a.factoryExtend),a.serviceFactory=this.serviceFactory,this.serviceFactory.initialize(a),this},create:function(){return this.serviceFactory.create()}},ServiceContainerConfig=function(a,b,c,d,e,f){this.serviceName=a,this.resourceUrl=b,this.mockData=c,this.$rootScope=d,this.$resource=e,this.avLog=f,this.serviceRequirements=["avLog"],this.eventChannel=a.toUpperCase(),this.mockMode=!1,this.serviceExtend={},this.mockExtend={},this.realExtend={},this.factoryExtend={},this.createService=function(){var a=_.extend({},ServiceContainer,{});return a.initialize(this).create()}};ServiceContainerConfig.jsHint="ignore me";