UNPKG

cocktail

Version:

CocktailJS is a small library to explore traits, talents, inheritance and annotations concepts in nodejs - Shake your objects and classes with Cocktail!

70 lines (54 loc) 1.79 kB
/* * * Copyright (c) 2013 - 2016 Maximiliano Fierro * Licensed under the MIT license. */ 'use strict'; var sequence = require('../sequence'); function Properties () {} Properties.prototype = { retain : false, priority : sequence.PROPERTIES, name : '@properties', _parameter: undefined, setParameter: function (value) { if (Object.prototype.toString.call(value) !== '[object Object]') { throw new Error('@properties parameter should be an Object'); } this._parameter = value; }, getParameter: function () { return this._parameter; }, _capitalizeName: function (name) { return (name.charAt(0).toUpperCase() + name.slice(1)); }, _getterName: function (property, value) { return (value !== false && value !== true ? 'get' : 'is') + this._capitalizeName(property); }, _setterName: function (property) { return 'set' + this._capitalizeName(property); }, _createPropertyFor: function (subject, name, value, doNotOverride) { if (typeof subject[name] === 'undefined' || doNotOverride !== true) { subject[name] = value; } subject[this._getterName(name, value)] = function(){ return this[name]; }; subject[this._setterName(name)] = function(set){ this[name] = set; }; }, process: function (subject) { var properties = this.getParameter(), isObject = !(subject.prototype), key; for (key in properties) { if (properties.hasOwnProperty(key)) { this._createPropertyFor(subject.prototype || subject, key, properties[key], isObject); } } } }; module.exports = Properties;