You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.0 KiB
CoffeeScript
75 lines
2.0 KiB
CoffeeScript
Promise = require "bluebird"
|
|
persist = require "node-persist"
|
|
path = require "path"
|
|
xtend = require "xtend"
|
|
|
|
# We MUST explicitly specify the `persist` directory, otherwise node-persist will bug out and write to its own module directory...
|
|
persist.initSync(continuous: false, dir: path.join(__dirname, "../persist"))
|
|
|
|
persist.increment = (key, amount = 1) ->
|
|
persist.setItem key, (persist.getItem(key) + amount)
|
|
|
|
persist.decrement = (key, amount = 1) ->
|
|
persist.setItem key, (persist.getItem(key) - amount)
|
|
|
|
persist.addListItem = (key, item) ->
|
|
newList = [item].concat (persist.getItem(key) ? [])
|
|
|
|
persist.setItem key, newList
|
|
|
|
persist.removeListItem = (key, item) ->
|
|
newList = (persist.getItem(key) ? [])
|
|
.filter (existingItem) ->
|
|
return (item == existingItem)
|
|
|
|
persist.setItem key, newList
|
|
|
|
persist.removeListItemByFilter = (key, filter) ->
|
|
newList = (persist.getItem(key) ? [])
|
|
.filter (item) ->
|
|
return !filter(item)
|
|
|
|
persist.setItem key, newList
|
|
|
|
persist.setProperty = (key, propertyKey, value) ->
|
|
newObj = {}
|
|
newObj[propertyKey] = value
|
|
oldObj = persist.get(key)
|
|
|
|
persist.setItem key, xtend(oldObj, newObj)
|
|
|
|
persist.removeProperty = (key, propertyKey) ->
|
|
# Extremely ghetto shallow clone
|
|
obj = xtend({}, persist.get(key))
|
|
delete obj[propertyKey]
|
|
|
|
persist.setItem key, obj
|
|
|
|
# Rough shim for write queueing...
|
|
writeQueue = []
|
|
currentlyWriting = false
|
|
_setItem = persist.setItem
|
|
|
|
persist.setItem = (key, value) ->
|
|
new Promise (resolve, reject) ->
|
|
_setItem.call(persist, key, value)
|
|
addItemToQueue key, value, resolve, reject
|
|
triggerWrite()
|
|
|
|
addItemToQueue = (key, value, resolveFunc, rejectFunc) ->
|
|
writeQueue.push [key, value, resolveFunc, rejectFunc]
|
|
|
|
triggerWrite = ->
|
|
if not currentlyWriting and writeQueue.length > 0
|
|
currentlyWriting = 1
|
|
[key, value, resolveFunc, rejectFunc] = writeQueue.shift()
|
|
|
|
Promise.resolve(persist.persistKey(key))
|
|
.then (result) -> resolveFunc(result)
|
|
.catch (err) -> rejectFunc(err)
|
|
.finally ->
|
|
currentlyWriting = false
|
|
triggerWrite()
|
|
|
|
module.exports = persist
|