oomph
Version:
Object Oriented javascript models for the client and the server
92 lines (80 loc) • 2.55 kB
JavaScript
// Generated by CoffeeScript 1.9.3
(function() {
var Base, _, publishSubscribe,
slice = [].slice;
_ = require('lodash');
publishSubscribe = require('../publicModules/publishSubscribe');
Base = (function() {
function Base(initialisedProps) {
var _class;
_class = this.constructor;
}
Base.extend = function() {
var _class, args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
_class = this;
return args.forEach(function(module) {
var initialiser, prop, value;
if (module.constructor !== Object) {
throw new Error('Arguments not an object or a list of objects');
}
if (module.moduleInitialise) {
initialiser = module.moduleInitialise.bind(_class);
initialiser();
}
for (prop in module) {
value = module[prop];
if (!_.includes(['moduleName', 'moduleInitialise'], prop)) {
_class[prop] = value;
}
}
if (!_class.extendedModules) {
_class.extendedModules = [];
}
if (!module.hasOwnProperty('moduleName')) {
return _class.extendedModules.push(module.moduleName);
}
});
};
Base.include = function() {
var _class, args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
_class = this;
return args.forEach(function(module) {
var initialiser, prop, value;
if (module.constructor !== Object) {
throw new Error('Arguments not an object or a list of objects');
}
if (module.moduleInitialise) {
initialiser = module.moduleInitialise.bind(_class);
initialiser();
}
for (prop in module) {
value = module[prop];
if (!_.includes(['moduleName', 'moduleInitialise'], prop)) {
_class.prototype[prop] = value;
}
}
if (!_class.includedModules) {
_class.includedModules = [];
}
if (!module.hasOwnProperty('moduleName')) {
return _class.includedModules.push(module.moduleName);
}
});
};
Base.getName = function() {
var funcNameRegex, results;
funcNameRegex = /function (.{1,})\(/;
results = funcNameRegex.exec(_class.toString());
if (results && results.length > 1) {
return results[1];
} else {
return '';
}
};
return Base;
})();
Base.extend(publishSubscribe);
module.exports = Base;
}).call(this);