Last active
February 28, 2017 11:55
-
-
Save rjoydip-zz/bc1786019f46dd17d4bbb83555514200 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var wordList = []; | |
const alp = 'abcdefghijklmnopqrstuvwxyz'.split(''); | |
const alpSymNum = alp.join('').concat('!@#$%^&*_+~0123456789'); | |
var countryJson = [ | |
{"name":"Israel","dial_code":"+972","code":"IL"}, | |
{"name":"Afghanistan","dial_code":"+93","code":"AF"}, | |
{"name":"Albania","dial_code":"+355","code":"AL"}, | |
{"name":"Algeria","dial_code":"+213","code":"DZ"}, | |
{"name":"AmericanSamoa","dial_code":"+1 684","code":"AS"}, | |
{"name":"Andorra","dial_code":"+376","code":"AD"}, | |
{"name":"Angola","dial_code":"+244","code":"AO"}, | |
{"name":"Anguilla","dial_code":"+1 264","code":"AI"}, | |
{"name":"Antigua and Barbuda","dial_code":"+1268","code":"AG"}, | |
{"name":"Argentina","dial_code":"+54","code":"AR"} | |
]; | |
var nameSet =["abandoned","able","absolute","adorable","adventurous","academic","acceptable","acclaimed","accomplished","accurate","aching","acidic","acrobatic","active","actual","adept","admirable","admired","adolescent"]; | |
function randGen(limit,min){ | |
var _min = min || 0; | |
return Math.floor((Math.random() * limit) + _min ); | |
} | |
function removeUndifined(w){ | |
return w.substring(0,w.indexOf('undefined')).concat(w.substring(w.indexOf('undefined') + 'undefined'.length,w.length)); | |
} | |
function generateWord(nosWord,joinFlag){ | |
for(var i = 0 ;i < nosWord ; i++){ | |
var word = ''; | |
var randomWordLength = (randGen(6,null) === 0) ? randGen(6,2) : randGen(6,1); | |
for(var j = 0; j < randomWordLength; j++){ | |
var randomIndex = randGen(alp.length,0); | |
(randomIndex !== undefined || randomIndex !== null) ? (alp[randomIndex] !== undefined || alp[randomIndex] !== null) ? word += alp[randomIndex] : false : false; | |
} | |
word = word.split(' ').filter(function(w){ | |
return w.length > 2; | |
}); | |
wordList.push(word); | |
wordList = wordList.filter(function(w1){ | |
return w1.length > 0; | |
}); | |
} | |
wordList = (wordList.length < nosWord) ? generateWord(nosWord - wordList.length) : wordList; | |
return (joinFlag) ? wordList.join(' ') : wordList; | |
} | |
var paragraph = generateWord(1000,true); | |
var lists = (paragraph.indexOf('.')) ? paragraph.split('.').filter(function(n){ return n.trim(); }) : false; | |
var words = paragraph.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g, ' ').split(' ').filter(function(n){ return n.length > 3; }); | |
function getName(params){ | |
var paramsArr = params.split(','); | |
var name = ''; | |
var firstNameRandIndex = Math.floor(Math.random() * nameSet.length); | |
var middleNameRandIndex = Math.floor(Math.random() * Math.random() * nameSet.length); | |
var lastNameRandIndex = Math.floor(Math.random() * (nameSet.length / firstNameRandIndex) + Math.random() * nameSet.length); | |
if((paramsArr[0] === 'true') && (paramsArr[1] === 'true')){ | |
name = nameSet[firstNameRandIndex] + " " + nameSet[lastNameRandIndex] | |
}else{ | |
name = nameSet[firstNameRandIndex]; | |
} | |
return name; | |
} | |
function generateMixId(len){ | |
var ids = ''; | |
for(var i =0; i < len ; i++){ | |
ids += alpSymNum.split('')[randGen(alpSymNum.length,0)]; | |
} | |
return ids | |
} | |
function generateRandomList(nosLines,callback){ | |
var _nl = null; | |
var listArr = []; | |
(nosLines == null) ? _nl = 5 : _nl = nosLines; | |
for(var i = 0; i< _nl;i++){ | |
var random1To10 = Math.floor(Math.random() * (10 - 1)); | |
var randomIndex0 = Math.floor(Math.floor(Math.random() * lists.length) + (i/ random1To10)); | |
(randomIndex0 == Infinity) ? false : listArr[i] = (lists[randomIndex0] !== undefined) ? lists[randomIndex0] : lists[random1To10]; | |
} | |
callback(null,listArr); | |
} | |
function filterJsonDataByRandomTake(data,rules,take,callback){ | |
var _data = data; | |
take = (take == undefined) ? Math.floor(Math.random() * _data.length) : take; | |
Object.keys(_data[take]).forEach(function(ele){ | |
(rules.indexOf(ele) === -1) ? delete _data[take][ele] : false; | |
}); | |
callback(null,_data[take]); | |
} | |
function generateRandomSetenceOrParagraph(nosSetence,range,callback){ | |
var _ns = null; | |
var wordArr = []; | |
var senArr = []; | |
var ur = 0; | |
(range === null) ? ur = 20 : ur = parseInt(range); | |
(nosSetence !== null) ? _ns = nosSetence : _ns = 50; | |
for(var i = 0; i< _ns; i++){ | |
for(var j = 0; j < ur; j++){ | |
var randomLimit = Math.floor(Math.random() * ur); | |
var randomIndex0 = Math.floor(Math.floor(Math.random() * words.length) + (j / randomLimit)); | |
(randomIndex0 == Infinity) ? false : wordArr[j] = (words[randomIndex0] !== undefined) ? words[randomIndex0] : words[randomLimit]; | |
} | |
senArr[i] = wordArr.join(' ').concat('.'); | |
} | |
return senArr; | |
} | |
function generateRandomSetence(nosSetence,range,callback){ | |
const _data = generateRandomSetenceOrParagraph(nosSetence,range,callback); | |
callback(null,_data); | |
} | |
function getStringBtNumberOfChar(_nosChar){ | |
return (paragraph.length > _nosChar) ? paragraph.substring(0,_nosChar) : generateRandomSetence(5,255,function(err,data){ | |
return data | |
}); | |
} | |
function randGen(max,min){ | |
var _max = max || 20; | |
var _min = min || 0; | |
var _rand = Math.floor((Math.random() * _max ) + min); | |
return (_min < _rand < _max ) ? _rand : randGen(_max,_min) ; | |
} | |
function generateRandomArray(_nosChar,_startValue){ | |
var _arr = []; | |
var _max = _startValue.split(',')[0] || 20; | |
var _min = _startValue.split(',')[1] || 0; | |
for(var i = 0; i < _nosChar; i++){ | |
_arr[i] = (randGen(_max,_min) === 0) ? randGen(_max,_min) : randGen(_max,_min); | |
} | |
return _arr; | |
} | |
var _randomData = { | |
getBigIntegerNumber : function(param){ | |
var objKeys = Object.keys(param); | |
var _fixed = (objKeys[objKeys.length-1] === 'bigInteger' && param[objKeys[objKeys.length-1]] != 0) ? _fixed = param[objKeys[objKeys.length-1]] : _fixed = 20; | |
var number = (Math.random()).toFixed(_fixed).toString(); | |
number = number.substring(1,number.indexOf('.')).concat(number.substring(number.indexOf('.')+1,number.length)); | |
return number; | |
}, | |
getNumber : function(param){ | |
var objKeys = Object.keys(param); | |
var _fixed = 0, | |
_number = 0, | |
_randMax = 5; | |
(objKeys[objKeys.length-1] === 'fixed' && param[objKeys[objKeys.length-1]] != 0) ? _fixed = param[objKeys[objKeys.length-1]] : false; | |
(objKeys[objKeys.length-2] === 'number' && param[objKeys[objKeys.length-2]] != 0) ? _randMax = param[objKeys[objKeys.length-2]] : false; | |
_number = (Math.random() * generateNumber(_randMax)).toFixed(parseInt(_fixed)).toString(); | |
return _number; | |
}, | |
getString : function(param){ | |
var objKeys = Object.keys(param); | |
var _nosChar = 10; | |
(objKeys[objKeys.length-1] === 'string' || objKeys[objKeys.length-1] === 'String' && param[objKeys[objKeys.length-1]] != 0) ? _nosChar = param[objKeys[objKeys.length-1]] : false; | |
return (objKeys[objKeys.length-1] === 'name') ? getName(param[objKeys[objKeys.length-1]]): getStringBtNumberOfChar(_nosChar); | |
}, | |
getText : function(param){ | |
var objKeys = Object.keys(param); | |
var _nosChar = 100; | |
(objKeys[objKeys.length-1] === 'text' || objKeys[objKeys.length-1] === 'Text' && param[objKeys[objKeys.length-1]] != 0) ? _nosChar = param[objKeys[objKeys.length-1]] : false; | |
return getStringBtNumberOfChar(_nosChar); | |
}, | |
getPhone : function(param){ | |
var phoneCode = null; | |
var objKeys = Object.keys(param); | |
var _nosChar = 10; | |
(objKeys[objKeys.length-1] === 'phone' || objKeys[objKeys.length-1] === 'Phone' && param[objKeys[objKeys.length-1]] != 0) ? _nosChar = param[objKeys[objKeys.length-1]] : false; | |
var number = (Math.random() * generateNumber(_nosChar)).toFixed(0).toString(); | |
filterJsonDataByRandomTake(countryJson,['dial_code'],Math.floor(Math.random() * 10),function(err,data){ | |
phoneCode = data['dial_code']; | |
}); | |
return "("+phoneCode+")-"+number; | |
}, | |
getCountry : function(){ | |
var code = null; | |
filterJsonDataByRandomTake(countryJson,['code'],Math.floor(Math.random() * 10),function(err,data){ | |
code = data['code']; | |
}); | |
return code; | |
}, | |
getQuotes: function(){ | |
var quotes = null; | |
generateRandomList(null,function(err,data){ | |
quotes = data | |
}); | |
return quotes; | |
}, | |
getArray : function(param){ | |
var objKeys = Object.keys(param); | |
var _nosChar = 10; | |
var _startValue = 10; | |
(objKeys[objKeys.length-2] === 'array' || objKeys[objKeys.length-2] === 'Array' && param[objKeys[objKeys.length-2]] != 0) ? _nosChar = param[objKeys[objKeys.length-2]] : _nosChar; | |
(objKeys[objKeys.length-1] === 'number' || objKeys[objKeys.length-1] === 'Number' && param[objKeys[objKeys.length-1]] != 0) ? _startValue = param[objKeys[objKeys.length-1]] : (param[objKeys[objKeys.length-1]] === '') ? _startValue : _startValue; | |
return generateRandomArray(_nosChar,_startValue); | |
}, | |
getMixedId : function(param){ | |
var objKeys = Object.keys(param); | |
var _nosChar = 10; | |
(objKeys[objKeys.length-1] === 'mixed' || objKeys[objKeys.length-1] === 'Mixed' && param[objKeys[objKeys.length-1]] != 0) ? _nosChar = param[objKeys[objKeys.length-1]] : _nosChar; | |
return generateMixId(parseInt(_nosChar)); | |
} | |
}; | |
function isObject(val){ | |
return typeof val === 'object'; | |
} | |
function generateNumber(numLen){ | |
var num = ''; | |
var i = 0; | |
for( ;i < parseInt(numLen); i++){ | |
num += 9; | |
} | |
return parseInt(num); | |
} | |
function getType(type){ | |
var _type = ''; | |
_type = (type == null) ? null : (type.indexOf('(') > -1 && type.indexOf(')') > -1) ? type.substring(0,type.indexOf('(')) : type; | |
_type = (_type.indexOf('|') > -1) ? (_type.substring(0,_type.indexOf('|'))) : _type; | |
return _type; | |
} | |
function getParams(typeArr){ | |
var _params = [], | |
_paramsKey = null, | |
_paramsValue = null; | |
(typeArr !== null) ? typeArr.forEach(function(e){ | |
if(e.indexOf('(') > -1 && e.indexOf(')') > -1){ | |
_paramsKey = e.substring(0,e.indexOf('(')); | |
_paramsValue = e.substring(e.indexOf('(')+1,e.indexOf(')')); | |
_params[_paramsKey] = _paramsValue; | |
}else{ | |
return false; | |
} | |
}) : false; | |
return _params; | |
} | |
function simplifyType(key,type){ | |
var _type = type, | |
_forType = null, | |
_forParams = []; | |
if(type.indexOf('|') > -1) { _forParams = _type.split('|'); } | |
else { _forParams.push(type); } | |
return { | |
key : key, | |
type: getType(_type), | |
params: getParams(_forParams) | |
}; | |
} | |
function getRandomData(key,type){ | |
var _simplified = simplifyType(key,type); | |
switch(_simplified.type){ | |
case 'bigInteger': | |
return _randomData.getBigInegerNumber(_simplified.params); | |
break; | |
case 'string': | |
return _randomData.getString(_simplified.params); | |
break; | |
case 'number': | |
return _randomData.getNumber(_simplified.params); | |
break; | |
case 'text': | |
return _randomData.getText(_simplified.params); | |
break; | |
case 'country': | |
return _randomData.getCountry(_simplified.params); | |
break; | |
case 'phone': | |
return _randomData.getPhone(_simplified.params); | |
break; | |
case 'quotes': | |
return _randomData.getQuotes(_simplified.params); | |
break; | |
case 'array': | |
return _randomData.getArray(_simplified.params); | |
break; | |
case 'mixed': | |
return _randomData.getMixedId(_simplified.params); | |
break; | |
default: | |
console.log("invalid option"); | |
} | |
} | |
function _parseObject(data){ | |
var _obj = data; | |
var _newObj = {}; | |
Object.keys(_obj).forEach(function(ele){ | |
return (isObject(_obj[ele])) ? _parseObject(_obj[ele]) : _obj[ele] = getRandomData(ele,_obj[ele]); | |
}); | |
return _obj; | |
} | |
function parse(data){ | |
return (isObject(data)) ? _parseObject(data): "Please check your dataset"; | |
} | |
/* | |
** Testing | |
*/ | |
var testSchema = { | |
id: 'mixed(20)', | |
name: 'string|name(true,false)', | |
address: { | |
street: 'text', | |
country: 'country', | |
pincode: 'number(6)|fixed(2)', | |
nested: { | |
a1 : 'string' | |
} | |
}, | |
details: { | |
bio: 'quotes', | |
contact : 'phone(5)' | |
}, | |
marks : 'array(20)|number(52,22)' | |
}; | |
console.log(parse(testSchema)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment