Last active
February 3, 2016 12:25
-
-
Save MSakamaki/8a950b52f7a4d563278e to your computer and use it in GitHub Desktop.
node express Mock Utility
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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