Skip to content

Instantly share code, notes, and snippets.

@rjoydip-zz
Last active February 26, 2017 13:57
Show Gist options
  • Save rjoydip-zz/287fccff30e40d0dbdb4b6210dc51cab to your computer and use it in GitHub Desktop.
Save rjoydip-zz/287fccff30e40d0dbdb4b6210dc51cab to your computer and use it in GitHub Desktop.
This example is for converting a custom (my own) schema to JSON schema.
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 paragraph = `Lorem ipsum dolor sit amet, consectetur adipiscing elit.Etiam et orci cursus, sodales enim eu, luctus diam.Donec tempus ante ac nulla ultricies, a aliquet enim dictum.In in ex in libero ultrices ornare.Nam ultricies orci et lorem aliquet ultrices ut sed arcu.Praesent id tellus vel dolor vestibulum dapibus.In eu nunc cursus, faucibus lacus vel, dapibus neque.Suspendisse tincidunt leo vitae libero eleifend hendrerit.Nulla at nulla ac risus tempus aliquam ac eu nisi.Vivamus nec erat vel felis pulvinar scelerisque quis sed dui.Praesent eu metus mattis, mattis nisl in, auctor turpis.Vivamus quis lacus quis arcu ornare iaculis vel et neque.Donec ac ex id massa rhoncus feugiat nec in orci.Sed nec justo consequat, posuere velit in, scelerisque ipsum.Integer id arcu non dolor sagittis congue et at dui.Aliquam vestibulum eros ut pharetra dapibus.Nunc tincidunt ipsum in aliquam feugiat.Maecenas eu massa vel odio aliquet euismod quis sit amet mauris.Mauris at felis faucibus, molestie quam vel, accumsan justo.Duis consectetur magna in ornare luctus.Suspendisse sit amet metus at ante sagittis feugiat nec et purus.Quisque iaculis neque sit amet sollicitudin facilisis.`;
var lists = paragraph.split('.').filter(function(n){ return n.trim(); });
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]);
}
var _randomData = {
getBigInegerNumber : function(){
var number = (Math.random() * 20).toString();
number = number.substring(0,number.indexOf('.')).concat(number.substring(number.indexOf('.')+1,number.length));
return number;
},
getNumber : function(){
var number = (Math.random() * 999).toFixed(4).toString();
number = number.substring(0,number.indexOf('.')).concat(number.substring(number.indexOf('.')+1,number.length));
return number;
},
getString : function(){
return 'demo text content';
},
getText : function(){
return "this is a very big text";
},
getPhone : function(){
var phoneCode = null;
var number = (Math.random() * 9999).toFixed(5).toString();
number = number.substring(0,number.indexOf('.')).concat(number.substring(number.indexOf('.')+1,number.length));
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;
}
};
function checkType(type){
switch(type){
case 'bigInteger':
return _randomData.getBigInegerNumber();
break;
case 'string':
return _randomData.getString();
break;
case 'number':
return _randomData.getNumber();
break;
case 'text':
return _randomData.getText();
break;
case 'country':
return _randomData.getCountry();
break;
case 'phone':
return _randomData.getPhone();
break;
case 'quotes':
return _randomData.getQuotes();
break;
default:
console.log("invalid option");
}
}
function isObject(obj){
return (typeof obj === 'object') ? true : false;
}
var accessObj = {
obj: [],
setObject : function(obj){
this.obj.push(obj);
},
getObject : function(){
return this.filterObject(this.obj);
},
getObjectKey: function(obj){
return Object.keys(obj)[0];
},
getObjectValue: function(obj){
return Object.values(obj)[0];
},
filterObject : function(obj){
const _obj = obj;
const _newObj = {};
Object.keys(_obj).forEach(function(key){
if(Object.keys(_newObj).indexOf(Object.keys(_obj[key])[0]) > -1){
_newObj[Object.keys(_obj[key])][accessObj.getObjectKey(Object.values(_obj[key])[0])] = accessObj.getObjectValue(Object.values(_obj[key])[0]);
}else{
_newObj[Object.keys(_obj[key])] = Object.values(_obj[key])[0];
}
});
return _newObj;
}
};
function createKeyValuePairs(_lines,delem,objKey){
var _ownLocalObj = {};
var subObj = {};
var ids = _lines.substring(0,_lines.indexOf(delem));
var value = _lines.substring(_lines.indexOf(delem)+1,_lines.length);
(objKey.indexOf(":") > -1) ? _ownLocalObj[ids] = value : _ownLocalObj[objKey] = {[ids] : value };
accessObj.setObject(_ownLocalObj);
}
function createNestedKeyValuePairs(obj,objKey){
var _ownLocalObj = obj;
var newObj = {};
Object.keys(_ownLocalObj).forEach(function(key){
var _value = _ownLocalObj[key];
(_value.indexOf('{') > 0 && _value.indexOf('}') > 0) ? createNestedKeyValuePairs( _value.substring(_value.indexOf('{')+1,_value.indexOf('}')).split("|"),_value.substring(0,_value.indexOf('{')-1)) : createKeyValuePairs(_value,':',objKey);
});
}
function setRandomData(key,_obj){
var _newObj = {}
Object.keys(_obj).forEach(function(value){
if (isObject(_obj[value])) {
setRandomData(_obj[value],callback);
}else {
_obj[value] = checkType(_obj[value]);
}
});
return _obj;
}
function generateJson(dataSet){
var _dataObj = dataSet;
var _newObj = {};
var _subObj = {};
Object.keys(_dataObj).forEach(function(key){
(isObject(_dataObj[key]) ? _newObj[key] = setRandomData(key,_dataObj[key]) : _newObj[key] = checkType(_dataObj[key]) );
});
return _newObj;
}
function jsonSchemaCreate(paramOne,callback){
var _str = paramOne.substring(1,paramOne.length - 1).replace(/\s/g,'');
var _lines = _str.split(',');
createNestedKeyValuePairs(_lines,':',null);
callback(null,generateJson(accessObj.getObject()));
}
/*
** Testing
*/
var testSchemeOne = `{
id: bigInteger,
name: string,
address: {
street: text | country: country | pincode: number
},
details: {
bio: quotes | contact : phone
}
}`;
jsonSchemaCreate(testSchemeOne,function(err,res){
console.log(res);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment