Skip to content

Instantly share code, notes, and snippets.

@ysndr
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save ysndr/5e92e4d5c790750424a0 to your computer and use it in GitHub Desktop.

Select an option

Save ysndr/5e92e4d5c790750424a0 to your computer and use it in GitHub Desktop.
ControllerManager
/**
* File: index (.js)
* Description: Manages extern controllers bound together using events
* Dependencies: E3 (https://gist.github.com/813449af4a6c05b2cede.git)
* Author: y4ng0 @ yangodev
* Licence: MIT
*/
var E3 = require('E3'),
util = require('util'),
fs = require('fs'),
path = require('path'),
out = module.exports = {};
//------------------------------------------------------------------------------//
var ControllerManager = {
emitter: null,
controllers: null,
_initialized: false,
receive: function () {
this.emitter.receive.apply(this.emitter, arguments)
return this
},
send: function () {
this.emitter.send.apply(this.emitter, arguments)
return this
},
init: function (options) {
options = options || {}
options.reInit = options.reInit || false
options.CONTROLLER_DIR_NAME = options.CONTROLLER_DIR_NAME || 'controller'
options.ABSOLUTE_PATH = options.ABSOLUTE_PATH || false
// return if already initialized
if (this._initialized && !options.reInit) return this
var self = this
var p = path.join(path.dirname(process.argv[1]),
options.CONTROLLER_DIR_NAME)
// setup new E3 (ExtendedEventEmitter)
this.emitter = Object.create(E3.prototype)
this.emitter.init()
// set _initialzed to prevent endless recusion through intern methods
this._initialized = true
//load controllers
self.controllers = []
try {
self.controllers
= fs.readdirSync(p)
.map(function(item){
return addController( require(path.join(p, item)), self.emitter)
})
} catch (err) {
console.error( err )
self._initialized = 'failed'
} finally { return self }
}
}
function addController(contr, emitter) {
var instance = null
if ('function' === typeof contr) {
instance = new contr()
} else if ('object' === typeof contr) {
instance = Object.create(contr)
} else {
return
}
return instance.init(emitter)
}
module.exports = {
manager: ControllerManager
}
{
"name": "ControllerManager",
"version": "0.0.1",
"description": "Manages extern controllers bound together using events.",
"main": "ControllerManager",
"scripts": {
"test": "node ./test/test.js"
},
"dependencies": {
"E3": "git://gist.github.com/813449af4a6c05b2cede.git"
},
"keywords": [
"manager",
"controller",
"events"
],
"author": "y4ng0 @ yangodev",
"license": "MIT",
"devDependencies": {
"E3": "^0.1.1"
}
}
@ysndr
Copy link
Copy Markdown
Author

ysndr commented Sep 27, 2014

README comming

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment