MCPcopy Create free account
hub / github.com/PrairieLearn/PrairieLearn / _makeVariant

Function _makeVariant

lib/question.js:89–128  ·  view source on GitHub ↗

* Internal function, do not call directly. Create a variant object, do not write to DB. * @protected * * @param {Object} question - The question for the variant. * @param {Object} course - The course for the variant. * @param {Object} options - Options controlling the creati

(question, course, options, callback)

Source from the content-addressed store, hash-verified

87 * @param {function} callback - A callback(err, courseIssues, variant) function.
88 */
89 _makeVariant(question, course, options, callback) {
90 debug('_makeVariant()');
91 var variant_seed;
92 if (_(options).has('variant_seed') && options.variant_seed != null) {
93 variant_seed = options.variant_seed;
94 } else {
95 variant_seed = Math.floor(Math.random() * Math.pow(2, 32)).toString(36);
96 }
97 debug(`_makeVariant(): question_id = ${question.id}`);
98 questionServers.getModule(question.type, (err, questionModule) => {
99 if (ERR(err, callback)) return;
100 questionModule.generate(question, course, variant_seed, (err, courseIssues, data) => {
101 if (ERR(err, callback)) return;
102 const hasFatalIssue = _.some(_.map(courseIssues, 'fatal'));
103 var variant = {
104 variant_seed: variant_seed,
105 params: data.params || {},
106 true_answer: data.true_answer || {},
107 options: data.options || {},
108 broken: hasFatalIssue,
109 };
110 if (variant.broken) {
111 return callback(null, courseIssues, variant);
112 }
113 questionModule.prepare(question, course, variant, (err, extraCourseIssues, data) => {
114 if (ERR(err, callback)) return;
115 courseIssues.push(...extraCourseIssues);
116 const hasFatalIssue = _.some(_.map(courseIssues, 'fatal'));
117 var variant = {
118 variant_seed: variant_seed,
119 params: data.params || {},
120 true_answer: data.true_answer || {},
121 options: data.options || {},
122 broken: hasFatalIssue,
123 };
124 callback(null, courseIssues, variant);
125 });
126 });
127 });
128 },
129
130 /**
131 * Get a file that is generated by code.

Callers

nothing calls this directly

Calls 3

debugFunction · 0.85
callbackFunction · 0.85
_Function · 0.50

Tested by

no test coverage detected