added whitespace, updated tests for non-strict mode, fixed undefined vs null and string vs number bugs
This commit is contained in:
		
							parent
							
								
									9b930a09aa
								
							
						
					
					
						commit
						af4a0fb7e2
					
				@ -15,7 +15,7 @@ Usage
 | 
			
		||||
var Storage = require('dom-storage')
 | 
			
		||||
 | 
			
		||||
    // in-file, doesn't call `String(val)` on values (default)
 | 
			
		||||
  , localStorage = new Storage('./db.json', { strict: false })
 | 
			
		||||
  , localStorage = new Storage('./db.json', { strict: false, ws: '  ' })
 | 
			
		||||
 | 
			
		||||
    // in-memory, does call `String(val)` on values (i.e. `{}` becomes `'[object Object]'`
 | 
			
		||||
  , sessionStorage = new Storage(null, { strict: true })
 | 
			
		||||
@ -41,6 +41,11 @@ API
 | 
			
		||||
  * key(n)
 | 
			
		||||
  * length
 | 
			
		||||
 | 
			
		||||
### Options
 | 
			
		||||
 | 
			
		||||
  * strict - whether to stringify strictly as text `[Object object]` or as json `{ foo: bar }`.
 | 
			
		||||
  * ws - the whitespace to use saving json to disk. Defaults to `'  '`.
 | 
			
		||||
 | 
			
		||||
Tests
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								lib/index.js
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								lib/index.js
									
									
									
									
									
								
							@ -1,4 +1,3 @@
 | 
			
		||||
/*jshint node:true es5:true laxcomma:true laxbreak:true*/
 | 
			
		||||
// http://www.rajdeepd.com/articles/chrome/localstrg/LocalStorageSample.htm
 | 
			
		||||
 | 
			
		||||
// NOTE:
 | 
			
		||||
@ -31,6 +30,12 @@
 | 
			
		||||
    , enumerable: false
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    Object.defineProperty(this, '___priv_ws___', {
 | 
			
		||||
      value: opts.ws || '  '
 | 
			
		||||
    , writable: false
 | 
			
		||||
    , enumerable: false
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      db = JSON.parse(fs.readFileSync(path));
 | 
			
		||||
    } catch(e) {
 | 
			
		||||
@ -44,13 +49,23 @@
 | 
			
		||||
 | 
			
		||||
  Storage.prototype.getItem = function (key) {
 | 
			
		||||
    if (this.hasOwnProperty(key)) {
 | 
			
		||||
      return this.___priv_strict___ && String(this[key]) || this[key];
 | 
			
		||||
      if (this.___priv_strict___) {
 | 
			
		||||
        return String(this[key]);
 | 
			
		||||
      } else {
 | 
			
		||||
        return this[key];
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return null;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Storage.prototype.setItem = function (key, val) {
 | 
			
		||||
    this[key] = this.___priv_strict___ && String(val) || val;
 | 
			
		||||
    if (val === undefined) {
 | 
			
		||||
      this[key] = null;
 | 
			
		||||
    } else if (this.___priv_strict___) {
 | 
			
		||||
      this[key] = String(val);
 | 
			
		||||
    } else {
 | 
			
		||||
      this[key] = val;
 | 
			
		||||
    }
 | 
			
		||||
    this.___save___();
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
@ -91,7 +106,11 @@
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.___priv_bk___.lock = true;
 | 
			
		||||
    fs.writeFile(this.___priv_bk___.path, JSON.stringify(this), 'utf8', function (e) {
 | 
			
		||||
    fs.writeFile(
 | 
			
		||||
      this.___priv_bk___.path
 | 
			
		||||
    , JSON.stringify(this, null, this.___priv_ws___)
 | 
			
		||||
    , 'utf8'
 | 
			
		||||
    , function (e) {
 | 
			
		||||
      self.___priv_bk___.lock = false;
 | 
			
		||||
      if (e) {
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,7 @@
 | 
			
		||||
  "author": "AJ ONeal <coolaj86@gmail.com> (http://coolaj86.info)",
 | 
			
		||||
  "name": "dom-storage",
 | 
			
		||||
  "description": "W3C DOM Storage (localStorage and sessionStorage) for Node.JS",
 | 
			
		||||
  "version": "2.0.0",
 | 
			
		||||
  "version": "2.0.1",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git://github.com/coolaj86/node-dom-storage.git"
 | 
			
		||||
 | 
			
		||||
@ -1,16 +1,15 @@
 | 
			
		||||
/*jshint node:true es5:true laxcomma:true laxbreak:true*/
 | 
			
		||||
(function () {
 | 
			
		||||
  "use strict";
 | 
			
		||||
 | 
			
		||||
  var assert = require('assert')
 | 
			
		||||
    , fs = require('fs')
 | 
			
		||||
    , Storage = require('dom-storage')
 | 
			
		||||
    , Storage = require('../')
 | 
			
		||||
    , dbPath = './db.json'
 | 
			
		||||
    ;
 | 
			
		||||
 | 
			
		||||
  function runTest(storage) {
 | 
			
		||||
    // should not return prototype properties
 | 
			
		||||
    assert.strictEqual(null, Object.getItem('key'));
 | 
			
		||||
    assert.strictEqual(null, storage.getItem('key'));
 | 
			
		||||
    
 | 
			
		||||
    assert.strictEqual(0, Object.keys(storage).length);
 | 
			
		||||
    assert.strictEqual(0, storage.length);
 | 
			
		||||
@ -20,7 +19,7 @@
 | 
			
		||||
    assert.strictEqual(storage.key(0), 'a');
 | 
			
		||||
 | 
			
		||||
    storage.setItem('b', '2');
 | 
			
		||||
    assert.strictEqual(storage.getItem('a'), '1');
 | 
			
		||||
    assert.strictEqual(storage.getItem('a'), 1);
 | 
			
		||||
    assert.strictEqual(storage.getItem('b'), '2');
 | 
			
		||||
    assert.strictEqual(storage.length, 2);
 | 
			
		||||
 | 
			
		||||
@ -28,7 +27,7 @@
 | 
			
		||||
    assert.strictEqual(storage.getItem('c'), null);
 | 
			
		||||
 | 
			
		||||
    storage.setItem('c');
 | 
			
		||||
    assert.strictEqual(storage.getItem('c'), "undefined");
 | 
			
		||||
    assert.strictEqual(storage.getItem('c'), null);
 | 
			
		||||
    assert.strictEqual(storage.length, 3);
 | 
			
		||||
 | 
			
		||||
    storage.removeItem('c');
 | 
			
		||||
@ -42,8 +41,8 @@
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  function runAll() {
 | 
			
		||||
    var localStorage = new Storage(dbPath)
 | 
			
		||||
      , sessionStorage = new Storage()
 | 
			
		||||
    var localStorage = new Storage(dbPath, { strict: false, ws: '  ' })
 | 
			
		||||
      , sessionStorage = new Storage(null, { strict: false })
 | 
			
		||||
      ;
 | 
			
		||||
 | 
			
		||||
    runTest(sessionStorage);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user