diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..425fdf8 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,10 @@ +language: node_js +node_js: + - 6.9.2 +branches: + only: + - master +before_script: + - npm install +script: +- npm run build diff --git a/README.md b/README.md index e25a093..8a01b8e 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,13 @@ ![Lockr logo](http://i.imgur.com/m5kPjkB.png) -[![Code -Climate](https://codeclimate.com/github/tsironis/lockr/badges/gpa.svg)](https://codeclimate.com/github/tsironis/lockr) - > A minimal API wrapper for localStorage. Simple as your high-school locker. +[![Build Status](https://travis-ci.org/tsironis/lockr.svg?branch=master)](https://travis-ci.org/tsironis/lockr) +[![npm version](https://badge.fury.io/js/lockr.svg)](http://badge.fury.io/js/lockr) +[![CodeClimate](https://codeclimate.com/github/tsironis/lockr/badges/gpa.svg)](https://codeclimate.com/github/tsironis/lockr) +[![Dependencies](https://david-dm.org/tsironis/lockr.svg?theme=shields.io)](https://david-dm.org/tsironis/lockr) +[![devDependency Status](https://david-dm.org/tsironis/lockr/dev-status.svg)](https://david-dm.org/tsironis/lockr#info=devDependencies) + Lockr (pronounced /ˈlɒkəʳ/) is an extremely lightweight library (<2kb when minified), designed to facilitate how you interact with localStorage. Saving objects and arrays, numbers or other data types, accessible via a Redis-like API, heavily inspired by [node_redis](https://github.com/mranney/node_redis/). ## How to use lockr @@ -15,7 +18,7 @@ In order to user lockr, you firstly need to install it in your project. bower install lockr ``` -or you use npm to install +or you use npm to install ```js npm i lockr --save @@ -152,6 +155,17 @@ Lockr.smembers("wat"); // [2] Lockr.getAll(); > ["Coyote", 12345, [{name: 'John Doe', age: 18}, {name: 'Jane Doe', age: 19}]] ``` + +```Lockr.getAll``` - arguments: *[includeKeys] {Boolean}* + +> Returns contents of `localStorage` as an Array of dictionaries that contain key and value of the saved item. + +*Example* + +```js +Lockr.getAll(true); +> [{"username": "Coyote"}, {"user_id": 12345}, {"users": [{name: 'John Doe', age: 18}, {name: 'Jane Doe', age: 19}]}] +``` --- ```Lockr.flush()``` - arguments: *null* diff --git a/lockr.js b/lockr.js index 8734bbf..f5421a9 100644 --- a/lockr.js +++ b/lockr.js @@ -139,8 +139,18 @@ return keys; }; - Lockr.getAll = function () { + Lockr.getAll = function (includeKeys) { var keys = Lockr.keys(); + + if (includeKeys) { + return keys.reduce(function (accum, key) { + var tempObj = {}; + tempObj[key] = Lockr.get(key); + accum.push(tempObj); + return accum; + }, []); + } + return keys.map(function (key) { return Lockr.get(key); }); diff --git a/lockr.min.js b/lockr.min.js index 7105ea9..47eba50 100644 --- a/lockr.min.js +++ b/lockr.min.js @@ -1 +1 @@ -!function(root,factory){"undefined"!=typeof exports?"undefined"!=typeof module&&module.exports&&(exports=module.exports=factory(root,exports)):"function"==typeof define&&define.amd?define(["exports"],function(exports){root.Lockr=factory(root,exports)}):root.Lockr=factory(root,{})}(this,function(root,Lockr){"use strict";return Array.prototype.indexOf||(Array.prototype.indexOf=function(elt){var len=this.length>>>0,from=Number(arguments[1])||0;for(from=0>from?Math.ceil(from):Math.floor(from),0>from&&(from+=len);len>from;from++)if(from in this&&this[from]===elt)return from;return-1}),Lockr.prefix="",Lockr._getPrefixedKey=function(key,options){return options=options||{},options.noPrefix?key:this.prefix+key},Lockr.set=function(key,value,options){var query_key=this._getPrefixedKey(key,options);try{localStorage.setItem(query_key,JSON.stringify({data:value}))}catch(e){console&&console.warn("Lockr didn't successfully save the '{"+key+": "+value+"}' pair, because the localStorage is full.")}},Lockr.get=function(key,missing,options){var value,query_key=this._getPrefixedKey(key,options);try{value=JSON.parse(localStorage.getItem(query_key))}catch(e){value=localStorage[query_key]?{data:localStorage.getItem(query_key)}:null}return null===value?missing:"object"==typeof value&&"undefined"!=typeof value.data?value.data:missing},Lockr.sadd=function(key,value,options){var json,query_key=this._getPrefixedKey(key,options),values=Lockr.smembers(key);if(values.indexOf(value)>-1)return null;try{values.push(value),json=JSON.stringify({data:values}),localStorage.setItem(query_key,json)}catch(e){console.log(e),console&&console.warn("Lockr didn't successfully add the "+value+" to "+key+" set, because the localStorage is full.")}},Lockr.smembers=function(key,options){var value,query_key=this._getPrefixedKey(key,options);try{value=JSON.parse(localStorage.getItem(query_key))}catch(e){value=null}return null===value?[]:value.data||[]},Lockr.sismember=function(key,value,options){this._getPrefixedKey(key,options);return Lockr.smembers(key).indexOf(value)>-1},Lockr.keys=function(){var keys=[],allKeys=Object.keys(localStorage);return 0===Lockr.prefix.length?allKeys:(allKeys.forEach(function(key){-1!==key.indexOf(Lockr.prefix)&&keys.push(key.replace(Lockr.prefix,""))}),keys)},Lockr.getAll=function(){var keys=Lockr.keys();return keys.map(function(key){return Lockr.get(key)})},Lockr.srem=function(key,value,options){var json,index,query_key=this._getPrefixedKey(key,options),values=Lockr.smembers(key,value);index=values.indexOf(value),index>-1&&values.splice(index,1),json=JSON.stringify({data:values});try{localStorage.setItem(query_key,json)}catch(e){console&&console.warn("Lockr couldn't remove the "+value+" from the set "+key)}},Lockr.rm=function(key){localStorage.removeItem(key)},Lockr.flush=function(){Lockr.prefix.length?Lockr.keys().forEach(function(key){localStorage.removeItem(Lockr._getPrefixedKey(key))}):localStorage.clear()},Lockr}); \ No newline at end of file +!function(root,factory){"undefined"!=typeof exports?"undefined"!=typeof module&&module.exports&&(exports=module.exports=factory(root,exports)):"function"==typeof define&&define.amd?define(["exports"],function(exports){root.Lockr=factory(root,exports)}):root.Lockr=factory(root,{})}(this,function(root,Lockr){"use strict";return Array.prototype.indexOf||(Array.prototype.indexOf=function(elt){var len=this.length>>>0,from=Number(arguments[1])||0;for(from=from<0?Math.ceil(from):Math.floor(from),from<0&&(from+=len);from-1)return null;try{values.push(value),json=JSON.stringify({data:values}),localStorage.setItem(query_key,json)}catch(e){console.log(e),console&&console.warn("Lockr didn't successfully add the "+value+" to "+key+" set, because the localStorage is full.")}},Lockr.smembers=function(key,options){var value,query_key=this._getPrefixedKey(key,options);try{value=JSON.parse(localStorage.getItem(query_key))}catch(e){value=null}return null===value?[]:value.data||[]},Lockr.sismember=function(key,value,options){return Lockr.smembers(key).indexOf(value)>-1},Lockr.keys=function(){var keys=[],allKeys=Object.keys(localStorage);return 0===Lockr.prefix.length?allKeys:(allKeys.forEach(function(key){key.indexOf(Lockr.prefix)!==-1&&keys.push(key.replace(Lockr.prefix,""))}),keys)},Lockr.getAll=function(includeKeys){var keys=Lockr.keys();return includeKeys?keys.reduce(function(accum,key){var tempObj={};return tempObj[key]=Lockr.get(key),accum.push(tempObj),accum},[]):keys.map(function(key){return Lockr.get(key)})},Lockr.srem=function(key,value,options){var json,index,query_key=this._getPrefixedKey(key,options),values=Lockr.smembers(key,value);index=values.indexOf(value),index>-1&&values.splice(index,1),json=JSON.stringify({data:values});try{localStorage.setItem(query_key,json)}catch(e){console&&console.warn("Lockr couldn't remove the "+value+" from the set "+key)}},Lockr.rm=function(key){localStorage.removeItem(key)},Lockr.flush=function(){Lockr.prefix.length?Lockr.keys().forEach(function(key){localStorage.removeItem(Lockr._getPrefixedKey(key))}):localStorage.clear()},Lockr}); \ No newline at end of file diff --git a/package.json b/package.json index ba4917c..e4543d4 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,9 @@ "LICENSE" ], "main": "lockr.js", + "scripts": { + "build": "grunt" + }, "devDependencies": { "grunt-contrib-jshint": "~0.11.0", "grunt-contrib-jasmine": "~1.0.0", diff --git a/specs/lockrSpecs.js b/specs/lockrSpecs.js index dc57870..25d651f 100644 --- a/specs/lockrSpecs.js +++ b/specs/lockrSpecs.js @@ -84,6 +84,15 @@ describe('Lockr.get', function () { expect(contents).toContain([2, 3]); }); + it('gets all contents of the localStorage as Array of dictionaries (key/value)', function () { + var contents = Lockr.getAll(true); + + expect(contents.length).toBe(6); + expect(contents).toContain({"hash": {"test": 123, "hey": "whatsup"}}); + expect(contents).toContain({"test": 123}); + expect(contents).toContain({"array": [2, 3]}); + }); + describe('with pre-existing data', function() { beforeEach(function() { localStorage.setItem('wrong', ',fluffy,truffly,commas,hell');