forked from mikeal/couchie
-
Notifications
You must be signed in to change notification settings - Fork 0
/
couchie.js
61 lines (56 loc) · 1.89 KB
/
couchie.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
(function (window) {
var uuid = function b (a) {
return a?(a^Math.random()*16>>a/4).toString(16):([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,b)
}
function Couchie (name) {
if (name.indexOf('__') !== -1) throw new Error('Cannot have double underscores in name')
this.name = name
this.n = '_couchie__'+name+'__'
}
Couchie.prototype.clear = function (cb) {
if (localStorage[this.n+'_revs']) {
for (i in this.revs()) {
localStorage.removeItem(this.n+i)
}
setTimeout(cb, 0)
} else {
setTimeout(cb, 0)
}
}
Couchie.prototype.post = function (obj, cb) {
if (!obj._id || !obj._rev) return cb(new Error('Document does not have _id or _rev.'))
var revs = this.revs()
localStorage.setItem(this.n+obj._id, JSON.stringify(obj))
revs[obj._id] = obj._rev
this.setrevs(revs)
cb(null)
}
Couchie.prototype.bulk = function (docs, cb) {
var revs = this.revs()
for (var i=0;i<docs.length;i++) {
var obj = docs[i]
if (!obj._id || !obj._rev) return cb(new Error('Document does not have _id or _rev.'))
localStorage.setItem(this.n+obj._id, JSON.stringify(obj))
revs[obj._id] = obj._rev
}
this.setrevs(revs)
cb(null)
}
Couchie.prototype.get = function (id, cb) {
var doc = localStorage.getItem(this.n+id)
if (!doc) return cb(new Error('No such doc.'))
cb(null, JSON.parse(doc))
}
Couchie.prototype.all = function (cb) {
var self = this
var revs = self.revs()
cb(null, Object.keys(revs).map(function (id) {return JSON.parse(localStorage.getItem(self.n+id))}))
}
Couchie.prototype.revs = function () {
return JSON.parse(localStorage.getItem(this.n+'_revs') || '{}')
}
Couchie.prototype.setrevs = function (obj) {
localStorage.setItem(this.n+'_revs', JSON.stringify(obj))
}
window.couchie = function (name) { return new Couchie(name) }
}(window));