diff --git a/lib/basestar.js b/lib/basestar.js index a32be66..34bbb23 100644 --- a/lib/basestar.js +++ b/lib/basestar.js @@ -9,99 +9,95 @@ "use strict"; require('./utils'); -var namespace = require('node-namespace'); + var EventEmitter = require('events').EventEmitter; - // Basestar is a base class to be used when writing external Cylon adaptors and - // drivers. It provides some useful base methods and functionality - // - // It also extends EventEmitter, so child classes are capable of emitting events - // for other parts of the system to handle. -namespace("Cylon", function() { - this.Basestar = (function(klass) { - subclass(Basestar, klass); +// Basestar is a base class to be used when writing external Cylon adaptors and +// drivers. It provides some useful base methods and functionality +// +// It also extends EventEmitter, so child classes are capable of emitting events +// for other parts of the system to handle. +var Basestar = function Basestar(opts) { + this.self = this; +} - function Basestar(opts) { - this.self = this; +subclass(Basestar, EventEmitter); + +// Public: Proxies calls from all methods in the object to a target object +// +// methods - array of methods to proxy +// target - object to proxy methods to +// source - object to proxy methods from +// force - whether or not to overwrite existing method definitions +// +// Returns the klass where the methods have been proxied +Basestar.prototype.proxyMethods = function(methods, target, source, force) { + if (force == null) { force = false; } + return proxyFunctionsToObject(methods, target, source, force); +}; + +// Public: Defines an event handler that proxies events from a source object +// to a target object +// +// opts - object containing options: +// - targetEventName or eventName - event that should be emitted from the +// target +// - target - object to proxy event to +// - source - object to proxy event from +// - sendUpdate - whether or not to send an 'update' event +// +// Returns the source +Basestar.prototype.defineEvent = function(opts) { + var self = this; + + opts.sendUpdate = opts.sendUpdate || false; + opts.targetEventName = opts.targetEventName || opts.eventName; + + opts.source.on(opts.eventName, function() { + var args = arguments.length >= 1 ? [].slice.call(arguments, 0) : []; + args.unshift(opts.targetEventName); + opts.target.emit.apply(opts.target, args); + + if (opts.sendUpdate) { + args.unshift('update'); + opts.target.emit.apply(opts.target, args); } + }); - // Public: Proxies calls from all methods in the object to a target object - // - // methods - array of methods to proxy - // target - object to proxy methods to - // source - object to proxy methods from - // force - whether or not to overwrite existing method definitions - // - // Returns the klass where the methods have been proxied - Basestar.prototype.proxyMethods = function(methods, target, source, force) { - if (force == null) { force = false; } - return proxyFunctionsToObject(methods, target, source, force); - }; + return opts.source; +}; - // Public: Defines an event handler that proxies events from a source object - // to a target object - // - // opts - object containing options: - // - targetEventName or eventName - event that should be emitted from the - // target - // - target - object to proxy event to - // - source - object to proxy event from - // - sendUpdate - whether or not to send an 'update' event - // - // Returns the source - Basestar.prototype.defineEvent = function(opts) { - var self = this; +// Public: Creates an event handler that proxies events from an adaptor's +// 'connector' (reference to whatever module is actually talking to the hw) +// to the adaptor's associated connection. +// +// opts - hash of opts to be passed to defineEvent() +// +// Returns this.connector +Basestar.prototype.defineAdaptorEvent = function(opts) { + if (typeof opts === 'string') { opts = { eventName: opts }; } - opts.sendUpdate = opts.sendUpdate || false; - opts.targetEventName = opts.targetEventName || opts.eventName; + opts['source'] = this.connector; + opts['target'] = this.connection; - opts.source.on(opts.eventName, function() { - var args = arguments.length >= 1 ? [].slice.call(arguments, 0) : []; - args.unshift(opts.targetEventName); - opts.target.emit.apply(opts.target, args); + return this.defineEvent(opts); +}; - if (opts.sendUpdate) { - args.unshift('update'); - opts.target.emit.apply(opts.target, args); - } - }); +// Public: Creates an event handler that proxies events from an device's +// 'connector' (reference to whatever module is actually talking to the hw) +// to the device's associated connection. +// +// opts - hash of opts to be passed to defineEvent() +// +// Returns this.connection +Basestar.prototype.defineDriverEvent = function(opts) { + if (typeof opts === 'string') { opts = { eventName: opts }; } - return opts.source; - }; + opts['source'] = this.connection; + opts['target'] = this.device; - // Public: Creates an event handler that proxies events from an adaptor's - // 'connector' (reference to whatever module is actually talking to the hw) - // to the adaptor's associated connection. - // - // opts - hash of opts to be passed to defineEvent() - // - // Returns this.connector - Basestar.prototype.defineAdaptorEvent = function(opts) { - if (typeof opts === 'string') { opts = { eventName: opts }; } + return this.defineEvent(opts); +}; - opts['source'] = this.connector; - opts['target'] = this.connection; - - return this.defineEvent(opts); - }; - - // Public: Creates an event handler that proxies events from an device's - // 'connector' (reference to whatever module is actually talking to the hw) - // to the device's associated connection. - // - // opts - hash of opts to be passed to defineEvent() - // - // Returns this.connection - Basestar.prototype.defineDriverEvent = function(opts) { - if (typeof opts === 'string') { opts = { eventName: opts }; } - - opts['source'] = this.connection; - opts['target'] = this.device; - - return this.defineEvent(opts); - }; - - return Basestar; - - })(EventEmitter); -}); +if (!global.Cylon) { global.Cylon = {}; } +module.exports = global.Cylon.Basestar = Basestar;