UNPKG

event_request

Version:
83 lines (66 loc) 1.84 kB
'use strict'; const PluginInterface = require( '../plugin_interface' ); const DataServer = require( '../../components/caching/data_server' ); /** * @brief DataServerPlugin responsible for creating a data server that other components can use */ class DataServerPlugin extends PluginInterface { constructor( pluginId, options = {} ) { super( pluginId, options ); } /** * @brief Returns the DataServer * * @returns {DataServer} */ getServer() { if ( this.server ) return this.server; this.dataServerOptions = typeof this.options.dataServerOptions === 'object' ? this.options.dataServerOptions : {}; return this.server = this.isValidDataServer( this.options.dataServer ) ? this.options.dataServer : new DataServer( this.dataServerOptions ); } /** * @brief Uses Duck-Typing to check if the Data Server is a valid data server * * @param {Object} dataServer * * @return {Boolean} */ isValidDataServer( dataServer ) { if ( typeof dataServer !== 'object' ) return false; if ( dataServer instanceof DataServer ) return true; let isValid = true; const mandatoryFunctions = ['get', 'set', 'delete', 'lock', 'unlock', 'increment', 'decrement', 'stop', 'touch', '_configure']; mandatoryFunctions.forEach( ( value ) => { if ( typeof dataServer[value] !== 'function' ) isValid = false; }); return isValid; } /** * @brief Attaches the middleware to the eventRequest * * @details Attaches a cleanUp event as well * * @returns {Array} */ getPluginMiddleware() { const pluginMiddleware = { handler : ( event ) => { event.dataServer = this.getServer(); event.on( 'cleanUp', () => { event.dataServer = null; }); event.next(); } }; return [pluginMiddleware]; } } module.exports = DataServerPlugin;