pudding
Version:
Generate test data with random embed values.
91 lines (79 loc) • 1.91 kB
JavaScript
/**
* Pudding context.
* @memberof module:puddling/lib
* @constructor Pudding
*/
const puddingEvaluator = require('pudding-evaluator')
const puddingContext = require('pudding-context')
const puddingDatasource = require('pudding-datasource')
/** @lends Pudding */
function Pudding (config = {}) {
const s = this
Object.assign(s, config)
}
Pudding.prototype = {
vars: {},
lang: 'ja', // TODO
/**
* Add vars.
* @param {object} vars - Variable.
* @returns {Pudding} - Returns self.
*/
addVars (vars) {
const s = this
s.vars = Object.assign({}, s.vars, vars)
return s
},
/**
* Set lang.
* @param {string} lang - Lang to set.
* @returns {Pudding} - Returns self.
*/
setLang (lang) {
const s = this
s.lang = lang
return s
},
/**
* Explode data.
* @param {object} seed - Expression object.
* @param {number} count - Data count.
* @param {object} [options] - Optional settings.
* @param {object} [options.locals] - Local variables.
* @returns {Array} - Exploded.
*/
explode (seed, count, options) {
options = options || []
let locals = options.locals || {}
const s = this
let evaluator = s.newEvaluator()
let datasource = s.newDatasource(count)
let exploded = []
for (let i = 0; i < count; i++) {
let data = datasource[ i ]
let context = s.newContext(i, locals, data)
let evaluated = evaluator.eval(seed, context)
exploded.push(evaluated)
}
return exploded
},
newDatasource (count) {
const s = this
let { lang } = s
return puddingDatasource(lang, count)
},
newEvaluator () {
return puddingEvaluator()
},
newContext (i, locals, data) {
const s = this
let vars = s.vars || {}
return puddingContext({
i: i,
index: i,
$index: i
}, vars, locals, data)
}
}
module.exports = Pudding