added update functionality

This commit is contained in:
Geoff Doty 2019-06-16 03:55:25 -05:00
parent d2875d4e84
commit faa2ea8f34
7 changed files with 90 additions and 9 deletions

View File

@ -42,6 +42,13 @@ you can also find items via properties like
pets.find({"type": "cat"});
// [{"id": "123fk91j7", "name": "Fluffy", "type": "cat"}]
and when it comes time to update you can do that to
var fluffy = pets.find({"name": "Fluffy"})[0]; // one record
fluffy.age = 25;
pets.update(fluffy);
and you can remove items via
pets.remove("123fk91j7");
@ -54,11 +61,12 @@ so, no records, right?
### API
The public API is very simple, you really only need 3 methods: `add`, `remove`, and `find`.
The public API is very simple, you really only need 4 methods: `add`, `update`, `remove`, and `find`.
| Method | Description |
|---|---|
| `.add(object)` | Adds entry to collection and returns entry(s) added |
| `.update(object)` | Updates a record |
| `.remove(id or object)` | Removes entry(s) from collection and returns removed |
| `.find(id or object)` | find all, find by id, or find by filter, returns array of entries |
| `.dump()` | saves records to JSON file |
@ -102,3 +110,7 @@ Anyone is welcome to contribute, however, if you decide to get involved, please
---
> [*]: with exception of a generated ID, if not provided
## TODO
- make reactive, so just doing `fluffy.age = 25` updates

22
dist/record.js vendored
View File

@ -1,5 +1,5 @@
/*! Record.js v0.6.1 | MIT | https://github.com/n2geoff/record.js */
(function (root, factory) {
/*! Record.js v0.7.0 | MIT | https://github.com/n2geoff/record.js */
;(function (root, factory) {
"use strict";
if (typeof module === "object" && module.exports) {
module.exports = factory(root.Record);
@ -62,6 +62,24 @@
}
}
update(entry) {
var idx = this.records.indexOf(entry);
if(this.records[idx].id === entry.id) {
this.records.splice(idx, 1, entry);
this._save();
return entry;
} else {
return false;
}
}
find(key) {
if (!key) {

4
dist/record.min.js vendored
View File

@ -1,2 +1,2 @@
/*! Record.js v0.6.1 | MIT | https://github.com/n2geoff/record.js */
!function(t,e){"use strict";"object"==typeof module&&module.exports?module.exports=e(t.Record):t.Record=e(t.Record)}(this,function(){"use strict";return class{constructor(t){if(this.store=(t||{}).store,this.debug=(t||{}).debug||!1,this.records=[],this.store&&localStorage){this._log("Initializing localStorage for "+this.store);let t=this._load()||[];this.records=[...t]}}_log(){this.debug&&console.log(...arguments)}add(t){if(Array.isArray(t)){let e=[];return t.forEach(()=>{t.id||(t.id=Math.random().toString(36).substr(2,9)),this.records.push(t),this.entries.push(t)}),this._save(),e}return t.id||(t.id=Math.random().toString(36).substr(2,9)),this.records.push(t),this._save(),t}find(t){if(!t)return this.records;if("string"==typeof t||"number"==typeof t)return this.records.filter(e=>e.id===t);let e=Object.keys(t);return this.records.filter(r=>-1!==e.indexOf("id")?r.id===t.id:e.every(e=>r[e]===t[e]))}remove(t){if(!t||Array.isArray(t))return this._log(console.error("remove() accepts a single object")),[];let e=this.find(t);return e.forEach(t=>{this.records.splice(this.records.indexOf(t),1)}),this._save(),e}clear(){this.records=[],this._save()}_save(){this.store&&localStorage&&localStorage.setItem(this.store,JSON.stringify(this.records))}_load(){if(this.store&&localStorage)return JSON.parse(localStorage.getItem(this.store))||[]}dump(){!function(t,e){let r=document.createElement("a"),s=new Blob([e],{type:"text/plain"});r.href=URL.createObjectURL(s),r.download=t,r.click()}(`${this.store||"data"}.json`,JSON.stringify(this._load(),null,4))}}});
/*! Record.js v0.7.0 | MIT | https://github.com/n2geoff/record.js */
!function(t,e){"use strict";"object"==typeof module&&module.exports?module.exports=e(t.Record):t.Record=e(t.Record)}(this,function(){"use strict";return class{constructor(t){if(this.store=(t||{}).store,this.debug=(t||{}).debug||!1,this.records=[],this.store&&localStorage){this._log("Initializing localStorage for "+this.store);let t=this._load()||[];this.records=[...t]}}_log(){this.debug&&console.log(...arguments)}add(t){if(Array.isArray(t)){let e=[];return t.forEach(()=>{t.id||(t.id=Math.random().toString(36).substr(2,9)),this.records.push(t),this.entries.push(t)}),this._save(),e}return t.id||(t.id=Math.random().toString(36).substr(2,9)),this.records.push(t),this._save(),t}update(t){var e=this.records.indexOf(t);return this.records[e].id===t.id&&(this.records.splice(e,1,t),this._save(),t)}find(t){if(!t)return this.records;if("string"==typeof t||"number"==typeof t)return this.records.filter(e=>e.id===t);let e=Object.keys(t);return this.records.filter(r=>-1!==e.indexOf("id")?r.id===t.id:e.every(e=>r[e]===t[e]))}remove(t){if(!t||Array.isArray(t))return this._log(console.error("remove() accepts a single object")),[];let e=this.find(t);return e.forEach(t=>{this.records.splice(this.records.indexOf(t),1)}),this._save(),e}clear(){this.records=[],this._save()}_save(){this.store&&localStorage&&localStorage.setItem(this.store,JSON.stringify(this.records))}_load(){if(this.store&&localStorage)return JSON.parse(localStorage.getItem(this.store))||[]}dump(){!function(t,e){let r=document.createElement("a"),s=new Blob([e],{type:"text/plain"});r.href=URL.createObjectURL(s),r.download=t,r.click()}(`${this.store||"data"}.json`,JSON.stringify(this._load(),null,4))}}});

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{
"name": "record.js",
"version": "0.6.1",
"version": "0.7.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "record.js",
"version": "0.6.1",
"version": "0.7.0",
"description": "dead-simple storage-collection library",
"main": "src/record.js",
"directories": {

View File

@ -1,5 +1,5 @@
/*! Record.js v0.6.1 | MIT | https://github.com/n2geoff/record.js */
(function (root, factory) {
;(function (root, factory) {
"use strict";
if (typeof module === "object" && module.exports) {
module.exports = factory(root.Record);
@ -114,6 +114,33 @@
}
}
/**
* Updates a Record
*
* @param {Object} entry
*/
update(entry) {
// find entry index
var idx = this.records.indexOf(entry);
// sanity check
if(this.records[idx].id === entry.id) {
// update record
this.records.splice(idx, 1, entry);
// save to storage
this._save();
return entry;
} else {
return false;
}
}
/**
* Finds records in collection by id or object filter.
*

View File

@ -34,6 +34,30 @@ test("Record.js", function(t) {
t.end();
});
t.test("should be able to update a record", function(t) {
let plato = pets.find({"name": "plato"})[0];
t.equal(plato.age, undefined, "should not have age yet");
plato.age = 80;
let update = pets.update(plato);
t.equal(update.age, 80, "should exist in db now");
t.end();
});
t.test("should be able find pet", function(t) {
let plato = pets.find({"age": 80})[0];
t.ok(plato, "found plato");
t.equal(plato.name, "plato", "yep, that him");
t.end();
});
t.test("should find all matching records", function(t) {
let dogs = pets.find({"type": "dog"});