| /** | 
|  * class Namespace | 
|  * | 
|  * Simple object for storing attributes. Implements equality by attribute names | 
|  * and values, and provides a simple string representation. | 
|  * | 
|  * See also [original guide][1] | 
|  * | 
|  * [1]:http://docs.python.org/dev/library/argparse.html#the-namespace-object | 
|  **/ | 
| 'use strict'; | 
|   | 
| var $$ = require('./utils'); | 
|   | 
| /** | 
|  * new Namespace(options) | 
|  * - options(object): predefined propertis for result object | 
|  * | 
|  **/ | 
| var Namespace = module.exports = function Namespace(options) { | 
|   $$.extend(this, options); | 
| }; | 
|   | 
| /** | 
|  * Namespace#isset(key) -> Boolean | 
|  * - key (string|number): property name | 
|  * | 
|  * Tells whenever `namespace` contains given `key` or not. | 
|  **/ | 
| Namespace.prototype.isset = function (key) { | 
|   return $$.has(this, key); | 
| }; | 
|   | 
| /** | 
|  * Namespace#set(key, value) -> self | 
|  * -key (string|number|object): propery name | 
|  * -value (mixed): new property value | 
|  * | 
|  * Set the property named key with value. | 
|  * If key object then set all key properties to namespace object | 
|  **/ | 
| Namespace.prototype.set = function (key, value) { | 
|   if (typeof (key) === 'object') { | 
|     $$.extend(this, key); | 
|   } else { | 
|     this[key] = value; | 
|   } | 
|   return this; | 
| }; | 
|   | 
| /** | 
|  * Namespace#get(key, defaultValue) -> mixed | 
|  * - key (string|number): property name | 
|  * - defaultValue (mixed): default value | 
|  * | 
|  * Return the property key or defaulValue if not set | 
|  **/ | 
| Namespace.prototype.get = function (key, defaultValue) { | 
|   return !this[key] ? defaultValue : this[key]; | 
| }; | 
|   | 
| /** | 
|  * Namespace#unset(key, defaultValue) -> mixed | 
|  * - key (string|number): property name | 
|  * - defaultValue (mixed): default value | 
|  * | 
|  * Return data[key](and delete it) or defaultValue | 
|  **/ | 
| Namespace.prototype.unset = function (key, defaultValue) { | 
|   var value = this[key]; | 
|   if (value !== null) { | 
|     delete this[key]; | 
|     return value; | 
|   } | 
|   return defaultValue; | 
| }; |