Skip to content

Instantly share code, notes, and snippets.

@MSakamaki
Last active February 3, 2016 12:25
Show Gist options
  • Save MSakamaki/8a950b52f7a4d563278e to your computer and use it in GitHub Desktop.
Save MSakamaki/8a950b52f7a4d563278e to your computer and use it in GitHub Desktop.
node express Mock Utility
(function() {
global.MockDB = global.MockDB || new Map();
/**
* @example setting ovserve function
* global.MockOvserve.observe('ovserver_name', function(updateJson){
* stateCtrl.setJsonData(updateJson);
* });
*
* @example nofify method (parameter single only)
* global.MockOvserve.notify('ovserver_name', { param: 'PARAM' });
**/
global.MockOvserve = global.MockOvserve || (function(){
function Ovserve(){
this._Map = new Map();
}
// set ovserver
Ovserve.prototype.observe = function (name, fnc) {
var funcs = this._Map.get(name) || [];
funcs.push(fnc);
this._Map.set(name, funcs);
};
// remove ovserver
Ovserve.prototype.unobserve = function (name, func) {
var funcs = this._Map.get(name) || [];
this._Map.set(name, funcs.filter(function(_func){
return _func !== func;
}));
};
// notify ovserve
Ovserve.prototype.notify = function (name) {
var args = Array.prototype.slice.call( arguments, 1 );
(this._Map.get(name) || []).forEach(function(func, index){
func.apply(null, args);
});
};
return new Ovserve();
})();
/**
* @example
* var stateUtil = new require('../state.util')()
*
* exports.index = function(req, res) {
* stateUtil
* .setJsonData({ x: 1 })
* .setState(200)
* .sendGet(res);
* }
**/
function StateUtil() {
var _this = this;
var _state = 200;
var _sendData = {};
var _interval = 0;
var stateController = {
200: sucess,
400: sendError,
404: sendError,
500: sendError,
};
var api = {
createStanderdRouter: createStanderdRouter,
setState: setState,
setJsonData: setJsonData,
sendGet: sendGet,
sendNonError: sendNonError,
setInterval: _setInterval,
get: {
jsonData: getJsonData,
},
};
// public
function setState(state) {
_state = state || _state || 200;
return api;
}
function setJsonData(data) {
_sendData = data || _sendData || {};
return api;
}
function _setInterval(interval){
if (Number(interval)){
_interval = Number(interval);
console.log('setInterval', _interval);
} else {
_interval = _interval || 0
}
return api;
}
function sendGet(res) {
var action = stateController[_state];
if (action) {
action(res);
} else {
console.error('StateController Property Not Found');
res.status(500).send();
}
return api;
}
function sendNonError(res) {
res.send();
return api;
}
// -- private
function sucess(res) {
//console.log('res.json', _sendData);
setTimeout(function(){
res.json(_sendData);
},_interval)
}
function sendError(res) {
res.status(_state).send();
}
function getJsonData() {
return _sendData;
}
/**
* override api/xxxx/index.js file
* @example
* var stateCtrl = new require('../api.util')();
* module.exports = stateCtrl.createStanderdRouter(require('./seed.json'));
**/
function createStanderdRouter(seedJson){
var express = require('express');
var router = express.Router();
var stateCtrl = new StateUtil();
stateCtrl.setJsonData(seedJson);
var controller = {
index: function(req, res) {
stateCtrl.sendGet(res);
},
create: function(req, res) {
stateCtrl
.setJsonData(req.body)
.sendNonError(res);
},
update: function(req, res) {
stateCtrl
.setState(req.query.status)
.setInterval(req.query.interval)
.sendNonError(res);
},
};
router.get('/', controller.index);
router.post('/', controller.create);
router.put('/', controller.update);
return router;
}
return api;
}
module.exports = StateUtil;
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment