namespace.js (1824B)
1 /** 2 * class Namespace 3 * 4 * Simple object for storing attributes. Implements equality by attribute names 5 * and values, and provides a simple string representation. 6 * 7 * See also [original guide][1] 8 * 9 * [1]:http://docs.python.org/dev/library/argparse.html#the-namespace-object 10 **/ 11 'use strict'; 12 13 var $$ = require('./utils'); 14 15 /** 16 * new Namespace(options) 17 * - options(object): predefined propertis for result object 18 * 19 **/ 20 var Namespace = module.exports = function Namespace(options) { 21 $$.extend(this, options); 22 }; 23 24 /** 25 * Namespace#isset(key) -> Boolean 26 * - key (string|number): property name 27 * 28 * Tells whenever `namespace` contains given `key` or not. 29 **/ 30 Namespace.prototype.isset = function (key) { 31 return $$.has(this, key); 32 }; 33 34 /** 35 * Namespace#set(key, value) -> self 36 * -key (string|number|object): propery name 37 * -value (mixed): new property value 38 * 39 * Set the property named key with value. 40 * If key object then set all key properties to namespace object 41 **/ 42 Namespace.prototype.set = function (key, value) { 43 if (typeof (key) === 'object') { 44 $$.extend(this, key); 45 } else { 46 this[key] = value; 47 } 48 return this; 49 }; 50 51 /** 52 * Namespace#get(key, defaultValue) -> mixed 53 * - key (string|number): property name 54 * - defaultValue (mixed): default value 55 * 56 * Return the property key or defaulValue if not set 57 **/ 58 Namespace.prototype.get = function (key, defaultValue) { 59 return !this[key] ? defaultValue : this[key]; 60 }; 61 62 /** 63 * Namespace#unset(key, defaultValue) -> mixed 64 * - key (string|number): property name 65 * - defaultValue (mixed): default value 66 * 67 * Return data[key](and delete it) or defaultValue 68 **/ 69 Namespace.prototype.unset = function (key, defaultValue) { 70 var value = this[key]; 71 if (value !== null) { 72 delete this[key]; 73 return value; 74 } 75 return defaultValue; 76 };