UNPKG

wheel-of-fortune-participants

Version:

Easy generate files for https://github.com/finanzcheck/wheel-of-fortune

170 lines (147 loc) 3.82 kB
'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var faker = _interopDefault(require('faker')); var fs = _interopDefault(require('fs')); var path = _interopDefault(require('path')); var shelljs = require('shelljs'); var Chance = _interopDefault(require('chance')); var chance = new Chance(); const MIN = 20; const MAX = 50; class Generator { /** * * @param {String} ext * @param {String} filename * @param {Number} [min] * @param {Number} [max] */ constructor(ext, filename) { let min = arguments.length <= 2 || arguments[2] === undefined ? MIN : arguments[2]; let max = arguments.length <= 3 || arguments[3] === undefined ? MAX : arguments[3]; this.ext = ext; this._filename = filename; this.min = min; this.max = max; this._participants = null; } /** * * @returns {Generator} */ generate() { shelljs.mkdir('-p', path.dirname(this.filename)); fs.writeFileSync(this.filename, this, 'utf8'); return this; } /** * * @returns {String} */ get filename() { const _filename = this._filename; const ext = this.ext; return `${ _filename }.${ ext }`; } /** * * @returns {[{name:String, spokes:Number}]} */ get participants() { const _participants = this._participants; const min = this.min; const max = this.max; if (null !== _participants) { return _participants; } const p = () => { let spokes = chance.integer({ min: 0, max: 79 }); let name = faker.fake('{{name.firstName}} {{name.lastName}}'); return { spokes, name }; }; let participants = []; let i = 0, amount = chance.integer({ min, max }); for (i; i < amount; i++) { participants.push(p()); } this._participants = participants; return participants; } /** * * @returns {string} */ toString() { return ''; } /** * * @returns {Generator} */ log() { const filename = this.filename; const participants = this.participants; console.log(`${ filename } successful generated with ${ participants.length } participants.`); return this; } /** * * @param generator * @returns {Generator} */ static file(generator) { return generator.generate().log(); } } class GeneratorCSV extends Generator { constructor(filename, cols) { super('csv', filename); this.cols = cols; } /** * * @returns {string} */ toString() { let participants = super.participants.map(data => { let p = []; this.cols.forEach(col => { p.push(data[col]); }); return p.join(';'); }); return [this.cols.join(';')].concat(participants).join(require('os').EOL); } /** * * @param filename * @param cols * @returns {Generator} */ static file(filename, cols) { return super.file(new GeneratorCSV(filename, cols)); } } class GeneratorJSON extends Generator { constructor(filename) { super('json', filename); } /** * * @returns {String} */ toString() { return JSON.stringify(super.participants, null, 2); } /** * * @param filename * @returns {Generator} */ static file(filename) { return super.file(new GeneratorJSON(filename)); } } exports.GeneratorCSV = GeneratorCSV; exports.GeneratorJSON = GeneratorJSON;