Commit 4a11b35c by Иван Кубота

take any count of new questions, generate lists, generate human readable

parent 09075ed1
Pipeline #533 failed with stage
...@@ -19,7 +19,12 @@ const options = yargs ...@@ -19,7 +19,12 @@ const options = yargs
.option("c", { alias: "category", describe: "1 - product, 2 - standard", type: "string"}) .option("c", { alias: "category", describe: "1 - product, 2 - standard", type: "string"})
.option("i", { alias: "id", describe: "return question with id. use it with `seed` arg", type: "number"}) .option("i", { alias: "id", describe: "return question with id. use it with `seed` arg", type: "number"})
.option("a", { alias: "add", describe: `pass json [{"q": "questionsPath", "a": "answersPath"}]. Paths are relative to dir`, type: "string"})
.option("h", { alias: "human", describe: `human readable format`, type: "boolean"})
.option("l", { alias: "list", describe: `generate lots of questions`, type: "number"})
.argv; .argv;
let categoryFixed = false; let categoryFixed = false;
if(options.c) if(options.c)
categoryFixed = true; categoryFixed = true;
...@@ -64,22 +69,43 @@ var js = sources.map(a=>'./public/'+a).map(n=>fs.readFileSync(n)+'').join('\n\n' ...@@ -64,22 +69,43 @@ var js = sources.map(a=>'./public/'+a).map(n=>fs.readFileSync(n)+'').join('\n\n'
if(options.dir) if(options.dir)
process.env.KUS_DATA_DIR = options.dir; process.env.KUS_DATA_DIR = options.dir;
const data = require("../db.js"); const data = require("../db.js");
const body = 'const window = {};'+js+'; return {quizGenerator, standardGenerator, initDataProvider, seeded: Math.random.seeded, rand}'; const body = 'const window = {}, localStorage = {getItem:()=>"{}"};'+js+'; return {quizGenerator, standardGenerator, initDataProvider, seeded: Math.random.seeded, rand}';
var ctx = new Function('',body)(); var ctx = new Function('',body)();
const rand = ctx.rand, const rand = ctx.rand,
seeded = ctx.seeded; seeded = ctx.seeded;
try{
if( options.add )
data.more = new Function('','return '+ options.add+';' )();
}catch(e){
throw new Error(e)
}
//console.log(options); //console.log(options);
data.after = function(){ data.after = function(skipInit){
if(options.list){
ctx.initDataProvider( data );
var c = options.list, origI = options.i|0;
options.list = false;
for(var i = 0; i< c; i++){
options.i = origI+i;
console.log(`Question `+(options.i+1));
data.after(true);
console.log('');
}
return;
}
if( options.seed ) if( options.seed )
ctx.seeded.setStringSeed( options.seed ); ctx.seeded.setStringSeed( options.seed );
let countStdQ = Object.values(data.standardQuestions).length; let countStdQ = Object.values(data.standardQuestions).length;
let state = {id: rand(0,countStdQ-1)}; let state = {id: rand(1,countStdQ)};
if(options.random){ if(options.random){
...@@ -100,8 +126,9 @@ data.after = function(){ ...@@ -100,8 +126,9 @@ data.after = function(){
}; };
let id; let id;
do{ do{
id = rand(0,countStdQ-1); id = rand(1, countStdQ);
}while(id in used); }while(id in used);
used[id] = true; used[id] = true;
cur.id = id; cur.id = id;
...@@ -132,7 +159,9 @@ data.after = function(){ ...@@ -132,7 +159,9 @@ data.after = function(){
rand(Object.values(data.products)).image = 'https://robohash.org/'+seeded.toString(36) rand(Object.values(data.products)).image = 'https://robohash.org/'+seeded.toString(36)
} }
} }
if(!skipInit){
ctx.initDataProvider( data ); ctx.initDataProvider( data );
}
...@@ -142,7 +171,12 @@ data.after = function(){ ...@@ -142,7 +171,12 @@ data.after = function(){
}else{ }else{
result = ctx.standardGenerator(()=>state.id) result = ctx.standardGenerator(()=>state.id)
} }
if(options.human){
console.log(result.question)
result.answers.forEach(a=>
console.log( (result.type==='checkbox'?(a.correct?'[v]':'[ ]'):(a.correct?'(o)':'( )'))+ ' '+a.text)
)
}else{
if( options.verbose ){ if( options.verbose ){
console.log( result.log.join( '\n' ) ) console.log( result.log.join( '\n' ) )
}else{ }else{
...@@ -150,6 +184,7 @@ data.after = function(){ ...@@ -150,6 +184,7 @@ data.after = function(){
delete result.log; delete result.log;
console.log( '--- START ---\n\n' + JSON.stringify( result, null, 2 ) + '\n\n--- END ---' ) console.log( '--- START ---\n\n' + JSON.stringify( result, null, 2 ) + '\n\n--- END ---' )
} }
}
if( options.output ) if( options.output )
fs.writeFileSync( options.output, JSON.stringify( result, null, 2 ) ) fs.writeFileSync( options.output, JSON.stringify( result, null, 2 ) )
}; };
......
номер вопроса,ответ,правильный
2,"ААААКонечно, ведь наши производители используют только натуральное отборное сырье . Молоко не стерилизуют, а только лишь пастеризуют,убивая вредные бактерии, но сохраняя полезные. У детской продукции короткие сроки хранения, всего 5-7 суток.",да
2,"ААААКонечно, ведь наши производители используют только натуральное отборное сырье . Молоко не пастеризуют, а только лишь стерилизуют,убивая вредные бактерии, но сохраняя полезные. У детской продукции короткие сроки хранения, всего 5-7 суток.",
2,"ААААКонечно, ведь наши производители используют только натуральное отборное сырье . Молоко не стерилизуют, а только лишь пастеризуют,убивая вредные бактерии, но сохраняя полезные. У детской продукции короткие сроки хранения, всего 2-3 суток.",
2,"ААААКонечно, ведь наши производители используют только отборное непастеризованное молоко. У детской продукции короткие сроки хранения, всего 5-7 суток. И нежный приятный деткам вкус.",
,,
3,Селёдка,да
3,Жюльен,
3,Лук,да
\ No newline at end of file
категория,номер вопроса,Заголовок,карточка,множественный выбор,Тип вопроса,Тип ответа
4,2,Порекомендуете ли вы наши детские кисломолочные продукты покупателям с детьми? ,1,нет,текст,текст
4,3,Что изображено под шубой?,2,нет,текст с картинкой,картинка
\ No newline at end of file
...@@ -14,14 +14,18 @@ const store = new Store({ ...@@ -14,14 +14,18 @@ const store = new Store({
}); });
if(!window.storeLoaded){
try{ window.storeLoaded = true;
try{
var data = JSON.parse( localStorage.getItem( 'store' ) ); var data = JSON.parse( localStorage.getItem( 'store' ) );
window.addEventListener && console.log(data) window.addEventListener && console.log( data )
for(var k in data){ for( var k in data ){
store.set(k, data[k]); store.set( k, data[ k ] );
} }
}catch( e ){} }catch( e ){
store.on('change', function() { }
localStorage.setItem('store', JSON.stringify(store._props)); store.on( 'change', function(){
}); localStorage.setItem( 'store', JSON.stringify( store._props ) );
} );
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment