UNPKG

pomegranate-task-utilities

Version:

Adds Utility methods to compliment pomegranate-task-runner actions.

90 lines (82 loc) 2.13 kB
/** * @file ./lib/TaskValidator.js * @author Jim Bulkowski <jim.b@paperelectron.com> * @project Pomegranate Task Utilities * @license MIT {@link http://opensource.org/licenses/MIT} */ "use strict"; // const builder = new WeakMap() const _ = require('lodash') /** * @class TaskValidator * @example * let valid = new TaskValidator(Data) * .payload(['some', 'paths']) * .notify(['other', 'paths']) * .validate() */ class TaskValidator { /** * The Data object to validate * @param {Object} data */ constructor(data){ this.Errors = [] if(!data) {throw new Error('Payload arg is required.')} this.data = data this.payloadPaths = null this.notifyPaths = null } /** * Add paths required * @param {Array[string]} paths - Object paths * @returns {TaskValidator} */ payload(paths){ if(!_.has(this.data, 'payload')){ this.Errors.push(new Error('No payload path in this object')) } this.payloadPaths = paths return this } /** * * @param {Array[string]} paths - Object paths * @returns {TaskValidator} */ notify(paths){ if(!_.has(this.data, 'notify')){ this.Errors.push(new Error('No notify path in this object')) } this.notifyPaths = paths return this } /** * Validates the object under test. * @param {Object} logger - Pass in a logger to use when outputting errors. * @returns {boolean} - Does the supplied object contain the paths provided. */ validate(logger){ if(this.payloadPaths){ this.payloadPaths.forEach((v,k) => { if(!_.has(this.data.payload, v)) { this.Errors.push(new Error(`Key ${v} missing from supplied object.`)) } }) } if(this.notifyPaths){ this.notifyPaths.forEach((v,k) => { if(!_.has(this.data.notify, v)) { this.Errors.push(new Error(`Key ${v} missing from supplied object.`)) } }) } if(this.Errors.length && logger){ this.Errors.forEach((v) => { logger.error(v.message) }) } return !(this.Errors.length) } } module.exports = TaskValidator