UNPKG

pudding

Version:

Generate test data with random embed values.

91 lines (79 loc) 1.91 kB
/** * Pudding context. * @memberof module:puddling/lib * @constructor Pudding */ 'use strict' 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