l0bsterssg

node.js static responsive blog post generator
Log | Files | Refs | README

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 };