node package manager
Easy sharing. Manage teams and permissions with one click. Create a free org »

aedes-cached-persistence

aedes-cached-persistence  Build Status

Abstract class to write an Aedes [persistence][persistence] with in-process caching of subscriptions. It implements the API defined by aedes-persistence.

Install

To install aedes-cached--persistence, simply use npm:

npm install aedes-cached-persistence --save

Provided methods

Implement another persistence

Inheritance

In order to reuse aedes-cached-persistence, you need to:

'use strict'
 
var util = require('util')
var CachedPersistence = require('aedes-cached-persistence')
 
// if you need http://npm.im/aedes-packet, it is available 
// from this module as well 
// var Packet = CachedPersistence.Packet 
 
function MyPersistence (opts) {
  if (!(this instanceof MyPersistence)) {
    return new MyPersistence(opts)
  }
  // initialize your data here 
 
  CachedPersistence.call(this, opts)
}
 
util.inherits(MyPersistence, CachedPersistence)
 
MyPersistence.prototype.addSubscriptions = function (client, subs, cb) {
  // ..persistence specific implementation.. 
 
  // call this._addedSubscriptions when you are done 
  this._addedSubscriptions(client, subsObjs, cb)
}
 
MyPersistence.prototype.removeSubscriptions = function (client, subs, cb) {
  // ..persistence specific implementation.. 
 
  // call this._addedSubscriptions when you are done 
  this._removedSubscriptions(client, subs.map(subs, client), cb)
}
 
function toSubObj (sub) {
  return {
    clientId: this.id,
    topic: sub.topic
  }
}

Tests

A persistence needs to pass all tests defined in ./abstract.js. You can import and use that test suite in the following manner:

var test = require('tape').test
var myperst = require('./')
var abs = require('aedes-cached-persistence/abstract')
 
abs({
  test: test,
  persistence: myperst
})

If you require some async stuff before returning, a callback is also supported:

var test = require('tape').test
var myperst = require('./')
var abs = require('aedes-persistence/abstract')
var clean = require('./clean') // invented module 
 
abs({
  test: test,
  buildEmitter: require('mymqemitter'), // optional 
  persistence: function build (cb) {
    clean(function (err) {
      cb(err, myperst())
    })
  }
})

License

MIT