Skip to content

Instantly share code, notes, and snippets.

@rjoydip-zz
Last active February 28, 2017 11:55
Show Gist options
  • Save rjoydip-zz/bc1786019f46dd17d4bbb83555514200 to your computer and use it in GitHub Desktop.
Save rjoydip-zz/bc1786019f46dd17d4bbb83555514200 to your computer and use it in GitHub Desktop.
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