this.removePlayerFromRoster=function(playerId,seasonId){

			var rostersDao = new universalDaoModule.UniversalDao(
				this.ctx.mongoDriver,
				{collectionName: 'rosters'}
			);

			var qf=QueryFilter.create();
			qf.addCriterium("baseData.season.oid",QueryFilter.operation.EQUAL,seasonId);
			qf.addCriterium("listOfPlayers.players",QueryFilter.operation.ALL,[{"registry" : "people","oid" : playerId}]);

			rostersDao.find(qf,function(err,rosters){

				if (err) {
					log.error(err);
				}
				rosters.forEach(function(roster){
					var filteredPlayers=[];
					roster.listOfPlayers.players.forEach(function(playerLink){
						if (playerLink && playerLink.oid!==playerId){
							filteredPlayers.push(playerLink);
						}
					});
					roster.listOfPlayers.players=filteredPlayers;
					roster.baseData.lastModification=new Date().getTime();
					rostersDao.save(roster,function(err){
						if (err){
							log.error(err);
							return;
						}
						log.debug("player removed from roster",playerId,roster);
					});
				});
			});
		};
	it('Create - dao should create object', function(done) {
		// this is first test, there should be no user
		var cn = 'testCol';
		var d = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: cn}
		);
		d.save(user1, function(err, data) {
			if (err) {
				throw new Error(err);
			}

			mongoDriver.getDb().collection(cn).find(function(err, cursor) {
				if (err) {
					throw new Error(err);
				}

				cursor.toArray(function(err, mongoData) {
					if (err) {
						throw new Error(err);
					}
					// we inserted single record into empty collection
					expect(mongoData.length).to.be.equal(1);
					expect(mongoData[0].name.firstName).to.be.equal(user1.name.firstName);
					expect(mongoData[0]._id).to.not.be.undefined();
					expect(mongoData[0]._id.toHexString()).to.be.equal(data.id);

					savedId = user1.id;
					done();
				});
			});
		});
	});
	it('Read - dao should return saved object', function(done) {
		var cn = 'testCol';
		var d = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: cn}
		);

		d.get(user1.id, function(err, data) {
			if (err) {
				throw new Error(err);
			}

			mongoDriver.getDb().collection(cn).findOne({"_id": new ObjectID.createFromHexString(user1.id)}, function(err, mongoData) {
				if (err) {
					throw new Error(err);
				}

				expect(mongoData._id.toHexString()).to.be.equal(data.id);
				expect(data.id).to.be.equal(user1.id);
				expect(data).to.be.eql(user1);

				done();
			});
		});
	});
Пример #4
0
		this.handleFeeRecount=function(event){
			var peopleDao = new universalDaoModule.UniversalDao(
				this.ctx.mongoDriver,
				{collectionName: 'people'}
			);
			peopleDao.get(event.id,function(err,data){
					self.handlePlayerChange({entity:data},true);
			});
		};
	it('Distinct - should return distinct values for a path', function(done) {
		// this is first test, there should be no user
		var cn = 'testCol';
		var d = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: cn}
		);
		var a1 = {
			meta: {
				tags: ['orange', 'blue']
			}
		};
		var a2 = {
			meta: {
				tags: ['red']
			}
		};
		var a3 = {
			meta: {
				tags: ['orange']
			}
		};
		d.save(a1, function(err, data) {
			if (err) {
				throw new Error(err);
			}

			d.save(a2, function(err, data) {
				if (err) {
					throw new Error(err);
				}

				d.save(a2, function(err, data) {
					if (err) {
						throw new Error(err);
					}

					d.distinct('meta.tags', {}, function(err, data) {
						if (err) {
							throw new Error(err);
						}

						expect(data.length).to.be.equal(3);
						expect(data).to.include('red');
						expect(data).to.include('orange');
						expect(data).to.include('blue');

						done();
					});
				});

			});
		});
	});
		this.handleHostingEnd=function (event){
			var self=this;
			var transferDao = new universalDaoModule.UniversalDao(
				this.ctx.mongoDriver,
				{collectionName: 'transfersOfficer'}
			);

			var peopleDao = new universalDaoModule.UniversalDao(
				this.ctx.mongoDriver,
				{collectionName: 'people'}
			);

			transferDao.get(event.transferId,function (err,transfer){
				if (err){log.error(err);return;}
					console.log(transfer);

				transfer.baseData.active='FALSE';

				peopleDao.get(transfer.baseData.officer.oid,function(err,officer){
					if (err){log.error(err);return;}

					if (!officer.officer){
							self.ctx.eventRegistry.emitProcesingError('Osoba nie je funkcionár. Transfer nebol vykonaný.',event);
							return;
					}
					if (!officer.officer.club || !officer.officer.club.oid ){
							self.ctx.eventRegistry.emitProcesingError('Funkcionár nemá definovaný klub. Transfer nebol vykonaný.',event);
							return;
					}

					if (officer.officer.club.oid!=transfer.baseData.clubTo.oid){
						self.ctx.eventRegistry.emitProcesingError('Klub TO sa nezhoduje s aktuálnym klubom. Transfer nebol vykonaný.',event);
						return;
					}
					officer.officer.club=transfer.baseData.clubFrom;
					officer.officer.dateOfApplicationForId=null;
					officer.officer.dateOfExpiration=null;
					var playerId=officer.id;
					peopleDao.save(officer, function(err,data){
						if (err){log.error(err);return;}

						transferDao.save(transfer,function(err,data){
							if (err){log.error(err);return;}
							log.verbose('transfer updated');
							self.removePlayerFromRoster(playerId,transfer.baseData.season.oid);
						});
					});
				});
			});
		};
	it('Delete - dao should remove saved object', function(done) {
		var cn = 'testCol';
		var d = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: cn}
		);
		d.remove(user1.id, function(err, count) {
			if (err) {
				throw new Error(err);
			}

			expect(count).to.be.equal(1);
			done();
		});
	});
				peopleDao.get(transfer.baseData.officer.oid,function(err,officer){
					if (err){log.error(err);return;}

					if (!officer.officer){
						self.ctx.eventRegistry.emitProcesingError('Osoba nie je funkcionár. Transfer nebol vykonaný.',event);
						return;
					}
					if (!officer.officer.club || !officer.officer.club.oid ){
						self.ctx.eventRegistry.emitProcesingError('Funkcionár nemá definovaný klub. Transfer nebol vykonaný.',event);
						return;
					}
					if (officer.officer.club.oid!=transfer.baseData.clubFrom.oid){
						self.ctx.eventRegistry.emitProcesingError('Klub FROM sa nezhoduje s aktuálnym klubom. Transfer nebol vykonaný.',event);
						return;
					}
					officer.officer.club=transfer.baseData.clubTo;
					officer.officer.dateOfApplicationForId=null;
					officer.officer.dateOfExpiration=null;
					var playerId=officer.id;
					peopleDao.save(officer, function(err,data){
						if (err){log.error(err);return;}

						transferDao.save(transfer,function(err,data){
							if (err){log.error(err);return;}
							self.removePlayerFromRoster(playerId,transfer.baseData.season.oid);
						});
					});
				});
			d.save(a2, function(err, data) {
				if (err) {
					throw new Error(err);
				}

				d.save(a2, function(err, data) {
					if (err) {
						throw new Error(err);
					}

					d.distinct('meta.tags', {}, function(err, data) {
						if (err) {
							throw new Error(err);
						}

						expect(data.length).to.be.equal(3);
						expect(data).to.include('red');
						expect(data).to.include('orange');
						expect(data).to.include('blue');

						done();
					});
				});

			});
Пример #10
0
			setTimeout(updateObjectMangler.mangle(obj, compiledSchema, function(err, local) {

				if (err){
					next(err);
					return;
				}

				if (local && local.length>0){
					callback(null,convertLocalErrors(local));
					return;
				}

				_dao.update(obj, function(err, data){
					if (err) {
						next(err);
						return;
					}
					callback(null,null,data);
					if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE] ){
						log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE]);
						eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE],{entity:obj,user:userCtx.user});
					}

					var auditEntity={};
					auditEntity.obj = obj;
					auditEntity.user = userCtx.user.id;
					auditEntity.action = "update";
					auditEntity.timeStamp = new Date().getTime();
					auditEntity.schemaName = schemaName;

					_daoAudit.save(auditEntity, function (data){});
				});

			}
					peopleDao.save(officer, function(err,data){
						if (err){log.error(err);return;}

						transferDao.save(transfer,function(err,data){
							if (err){log.error(err);return;}
							self.removePlayerFromRoster(playerId,transfer.baseData.season.oid);
						});
					});
Пример #12
0
	this.getBySchema = function(schemaName,userCtx,id,callback) {

		var schema = schemaRegistry.getSchema(schemaName);

		if (!schema) {
			log.error('schema %s not found', schemaName);
			throw new Error('Schema not found');
		}

		var compiledSchema = schema.compiled;

		if (!compiledSchema) {
			log.error('schema %s is not compiled', schemaName);
			throw new Error('Schema is not compiled');
		}

		if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.READ,userCtx.perm)){
			callback(null,securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.READ)));
			log.verbose('Not authorized to get object ',schemaName);
			return;
		}


		_dao = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: compiledSchema.table}
		);

		if (!id){
			log.error('Id is not defined for read from schema', schemaName);
			throw new Error ('Id is not defined.');
		}
		_dao.get(id, function(err, data){
			if (err) {
				log.error(err);
				next(err);
				return;
			}
			setTimeout(getObjectMangler.mangle(data, compiledSchema, function(err, cb) {
									if (err){next(err); return;}
									callback(null,null,data);
								}), 0);

		});
	};
Пример #13
0
	this.getArticleTagsDistinct = function(req, callback) {

		log.silly('searching tags distinct', req.params);
		var dao = new universalDaoModule.UniversalDao(mongoDriver, {
			collectionName: 'portalArticles'
		});

		//db.portalArticles.distinct("meta.tags")
		var qf=QueryFilter.create();

		dao.distinct('meta.tags',qf, function(err, data) {
			if (err) {
				callback(err);
			} else {
				callback(null,null,data);
			}
		});

	};
Пример #14
0
			eventScheduler.unscheduleEvents(entity.id,"event-player-recount-fees",function(err,data) {
				if (entity.hockeyPlayerInfo && entity.hockeyPlayerInfo.isActivePlayer ){
					if (entity.hockeyPlayerInfo.clubName){
						if (!entity.membershipFeeInfo){
							entity.membershipFeeInfo={};
						}
						if (!entity.membershipFeeInfo.paymentFrequency){
							entity.membershipFeeInfo.paymentFrequency='12xročne';
						}

						if (entity.baseData.birthDate){
							organizationsDao.get(entity.hockeyPlayerInfo.clubName.oid,function(err,org){
								var refDate=new Date();
									refDate.setMonth(8);//september
									refDate.setDate(1);
								var age=dateUtils.ageOnDate(refDate,dateUtils.reverseToDate(entity.baseData.birthDate));
								if ('Extraliga'==org.baseData.competitionCategory){
									var willSave=false;
									if (!entity.membershipFeeInfo.membershipFee || force ){
										willSave=true;
									}
									if (age<24){
										entity.membershipFeeInfo.membershipFee=6000;
										entity.membershipFeeInfo.membershipType="Extraliga do 23r.";
										// scheduled on next years
										if (!force){
											eventScheduler.scheduleEvent( new Date((refDate.getFullYear()+24-age),8,1).getTime(),'event-player-recount-fee-profile',{id:entity.id},[entity.id],function(err,data){
												if (err){
													log.err(err);
													return;
												}
												log.debug('Scheduled fee profile recount',entity.id);
											} );
										}
									} else {
										entity.membershipFeeInfo.membershipFee=9600;
										entity.membershipFeeInfo.membershipType="Extraliga nad 23r.";
									}
									if (willSave){
										peopleDao.save(entity,function(err,data){
											if (err){
												log.error(err);
											}
											log.info('Player fee profile updated ', entity.id );
										});
									}
								}
							});
						}



					}
				}
			});
	it('Update - dao should update saved object empty unset', function(done) {
		var cn = 'testCol';
		var d = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: cn}
		);

		var updatedUser = {
			id: user1.id,
			name: {
				firstName: 'Jim'
			},
			address: {
				city: 'notnullcity'
			}
		};

		d.update(updatedUser, function(err, count){
			if (err) {
				throw new Error(err);
			}

			expect(count).to.be.equal(1);

			mongoDriver.getDb().collection(cn).findOne({"_id": new ObjectID.createFromHexString(user1.id)}, function(err, mongoData) {
				if (err) {
					throw new Error(err);
				}
				expect(mongoData._id.toHexString()).to.be.equal(updatedUser.id);
				expect(mongoData.name.firstName).to.be.equal(updatedUser.name.firstName);
				expect(mongoData.name.lastName).to.be.equal(user1.name.lastName);
				expect(mongoData.address).to.include.key('city');

				done();
			});
		});
	});
		function(err) {
			// async final callback
			if (err) {
				done(new Error('Failed to prepare test data'));
			}

			var opts = {
				crits: [{f: 'name', op: 'eq', v: 'fero'}]
			};
			d.list(opts, function(err, result) {
				if (err) {
					done(err);
				}

				done();
			});
		});
				rosters.forEach(function(roster){
					var filteredPlayers=[];
					roster.listOfPlayers.players.forEach(function(playerLink){
						if (playerLink && playerLink.oid!==playerId){
							filteredPlayers.push(playerLink);
						}
					});
					roster.listOfPlayers.players=filteredPlayers;
					roster.baseData.lastModification=new Date().getTime();
					rostersDao.save(roster,function(err){
						if (err){
							log.error(err);
							return;
						}
						log.debug("player removed from roster",playerId,roster);
					});
				});
Пример #18
0
			setTimeout(saveObjectMangler.mangle(obj, compiledSchema, function(err, local) {

				if (err){
					log.error(err);
					next(err);
					return;
				}
				if (local && local.length>0){
					res.status(400);
					next(convertLocalErrors(local));
					return;
				}

				objectTools.removeNullProperties(obj);

				_dao.save(obj, function(err, data){
					if (err) {
						log.error(err);
						next(err);
						return;
					}
					callback(null,null,data);


					if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE] ){
						log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE]);
						eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE],{entity:data,user:req.currentUser});
					}

					var auditEntity={};
					auditEntity.obj = obj;
					auditEntity.user = req.currentUser.id;
					auditEntity.action = "create";
					auditEntity.timeStamp = new Date().getTime();
					auditEntity.schemaName = schemaName;

					_daoAudit.save(auditEntity, function (data){
					});
				});

			}
	it('List with criteria - dao should find object by criteria', function(done) {
		var cn = 'testCol2';
		var d = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: cn}
		);

		// prepare several objects
		async.parallel([function (callback) {
			mongoDriver.getDb().collection(cn).save({
				name: 'fero',
				age: 15
			},
			callback);
		},
		function(callback) {
			mongoDriver.getDb().collection(cn).save({
				name: 'jozo',
				age: 17
			},
			callback);
		}],
		function(err) {
			// async final callback
			if (err) {
				done(new Error('Failed to prepare test data'));
			}

			var opts = {
				crits: [{f: 'name', op: 'eq', v: 'fero'}]
			};
			d.list(opts, function(err, result) {
				if (err) {
					done(err);
				}

				done();
			});
		});
	});
Пример #20
0
				_dao.save(obj, function(err, data){
					if (err) {
						log.error(err);
						next(err);
						return;
					}
					callback(null,null,data);


					if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE] ){
						log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE]);
						eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE],{entity:data,user:req.currentUser});
					}

					var auditEntity={};
					auditEntity.obj = obj;
					auditEntity.user = req.currentUser.id;
					auditEntity.action = "create";
					auditEntity.timeStamp = new Date().getTime();
					auditEntity.schemaName = schemaName;

					_daoAudit.save(auditEntity, function (data){
					});
				});
Пример #21
0
	this.searchBySchema = function(schemaName,userCtx,query,callback) {

		log.silly('searching in ',schemaName,' for', query);

		var schema = schemaRegistry.getSchema(schemaName);
		var dao = new universalDaoModule.UniversalDao(mongoDriver, {
			collectionName: schema.compiled.table
		});


		var compiledSchema = schema.compiled;

		if (!compiledSchema) {
			log.error('schema %s is not compiled', schemaName);
			throw new Error('Schema is not compiled');
		}


		if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.READ,userCtx.perm)){
			log.warn('user has not rights to search in schema',schemaName);
			callback(null,securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.READ)));
			return;
		}

		//remap to QueryFiter
		var qf=QueryFilter.create();
		if('sortBy' in query && query.sortBy){
			qf.addSort(query.sortBy[0].f,query.sortBy[0].o);
		}
		if ('limit' in query){
			qf.setLimit(query.limit);
		}
		if ('skip' in query){
			qf.setSkip(query.skip);
		}
		for(var c in query.criteria){
			qf.addCriterium(query.criteria[c].f,query.criteria[c].op,query.criteria[c].v);
		}

		enhanceQuery(qf,compiledSchema,schemaName,userCtx.profile,userCtx.user);

		log.silly('used crits', qf);
		dao.list(qf, function(err, data) {
			if (err) {
				next(err);
			} else {
				if (data) {
					var mangFuncs = [];
					for (var i = 0; i < data.length; i++) {
						mangFuncs.push((function(j) {
							return function(callback) {
								setTimeout(listObjectMangler.mangle(data[j], compiledSchema, function(err, cb) {
									callback(err, cb);
								}), 0);
							};
						}(i)));
					}

					async.parallelLimit(mangFuncs, 3, function(err, cb) {
						if (err) {
							callback(err);
							return;
						}
						callback(null,null,data);
					});
				} else {
					callback(null,null,data);
				}
			}
		});

	};
Пример #22
0
	this.saveBySchema = function(schemaName,userCtx,obj, callback) {

		var schema = schemaRegistry.getSchema(schemaName);

		if (!schema) {
			log.error('schema %s not found', schemaName);
			throw new Error('Schema not found');
		}

		var compiledSchema = schema.compiled;

		if (!compiledSchema) {
			log.error('schema %s is not compiled', schemaName);
			throw new Error('Schema is not compiled');
		}

		if (compiledSchema[consts.SAVE_BY_SCHEMA]){
			schemaName=compiledSchema[consts.SAVE_BY_SCHEMA];
			compiledSchema = schemaRegistry.getSchema(schemaName).compiled;
			if (!compiledSchema) {
				log.error('saveByschema %s is not compiled', schemaName);
				throw new Error('Schema is not compiled');
			}
		}

		if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.MODIFY,userCtx.perm)){
			callback(null,securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.MODIFY)));
			log.verbose('Not authorized to save object',schemaName);
			return;
		}

		var _dao = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: compiledSchema.table}
		);

		var _daoAudit = new universalDaoModule.UniversalDao(
			mongoDriver,
			{collectionName: 'auditLogs'}
		);

		log.verbose(" to save", obj);

		// var obj = req.body;


		if (obj.id){
			//UPDATE
			setTimeout(updateObjectMangler.mangle(obj, compiledSchema, function(err, local) {

				if (err){
					next(err);
					return;
				}

				if (local && local.length>0){
					callback(null,convertLocalErrors(local));
					return;
				}

				_dao.update(obj, function(err, data){
					if (err) {
						next(err);
						return;
					}
					callback(null,null,data);
					if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE] ){
						log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE]);
						eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_UPDATE],{entity:obj,user:userCtx.user});
					}

					var auditEntity={};
					auditEntity.obj = obj;
					auditEntity.user = userCtx.user.id;
					auditEntity.action = "update";
					auditEntity.timeStamp = new Date().getTime();
					auditEntity.schemaName = schemaName;

					_daoAudit.save(auditEntity, function (data){});
				});

			}
			), 0);
		}
		else {
			//CREATE
			setTimeout(saveObjectMangler.mangle(obj, compiledSchema, function(err, local) {

				if (err){
					log.error(err);
					next(err);
					return;
				}
				if (local && local.length>0){
					res.status(400);
					next(convertLocalErrors(local));
					return;
				}

				objectTools.removeNullProperties(obj);

				_dao.save(obj, function(err, data){
					if (err) {
						log.error(err);
						next(err);
						return;
					}
					callback(null,null,data);


					if (compiledSchema[consts.FIRE_EVENTS] && compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE] ){
						log.silly('Firing event',compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE]);
						eventRegistry.emitEvent(compiledSchema[consts.FIRE_EVENTS][consts.FIRE_EVENTS_CREATE],{entity:data,user:req.currentUser});
					}

					var auditEntity={};
					auditEntity.obj = obj;
					auditEntity.user = req.currentUser.id;
					auditEntity.action = "create";
					auditEntity.timeStamp = new Date().getTime();
					auditEntity.schemaName = schemaName;

					_daoAudit.save(auditEntity, function (data){
					});
				});

			}
			), 0);
		}
	};
Пример #23
0
	this.searchBySchemaCount = function(schemaName,query,callback) {

		log.silly('searching for', req.params);
		var schema = schemaRegistry.getSchema(schemaName);
		var dao = new universalDaoModule.UniversalDao(mongoDriver, {
			collectionName: schema.compiled.table
		});

		var compiledSchema = schema.compiled;

		if (!compiledSchema) {
			log.error('schema %s is not compiled', schemaName);
			throw new Error('Schema is not compiled');
		}

		if (!securityService.hasRightForAction(compiledSchema,securityServiceModule.actions.READ,req.perm)){
			log.warn('user has not rights to search in schema',schemaName);

			callback(securityService.missingPermissionMessage(securityService.requiredPermissions(compiledSchema,securityServiceModule.actions.READ)));
			return;
		}


		//remap to QueryFiter
		var qf=QueryFilter.create();

		for(var c in query.criteria){
			qf.addCriterium(crits.criteria[c].f,crits.criteria[c].op,crits.criteria[c].v);
		}

		securityService.applySchemaForcedCrits(compiledSchema,qf);

		if (req.profile){
				qf=securityService.applyProfileCrits(req.profile,schemaName,qf);
		}

		log.silly('used crits', crits);
		dao.count(qf, function(err, data) {
			if (err) {
				log.error(err);
				next(err);
			} else {
				if (data) {
					var mangFuncs = [];
					for (var i = 0; i < data.length; i++) {
						mangFuncs.push((function(j) {
							return function(callback) {
								setTimeout(listObjectMangler.mangle(data[j], compiledSchema, function(err, cb) {
									callback(err, cb);
								}), 0);
							};
						}(i)));
					}

					async.parallelLimit(mangFuncs, 3, function(err, cb) {
						if (err) {

							next(err);
						}

						callback(null,null,data);
					});
				} else {
						callback(null,null,data);
				}
			}
		});

	};