object-buffer v0.0.4
ObjectBuffer
What is this?
The ObjectBuffer
library provides an easy and flexible way to buffer properties on an Javascript object.
What?
Here an example: say you receive the temperature of a CPU via a WebSocket:
{
'temperature': 33
}
And now you want to buffer the temperature to display a chart, with minimal changes in existing code.
Instead of manually buffering / handling the property you can use ObjectBuffer
to get the job done:
1.) Create an ObjectBuffer instance
let ObjectBufferInstance = new ObjectBuffer;
2.) Adjust the server response
{
'^temperature[5]': 33
}
3.) Put it through the ObjectBuffer
packet = ObjectBufferInstance.update(packet)
packet
will now be:
{
'temperature': [33, 0, 0, 0, 0] // <- yay, buffered data!
}
done!
Installation
$ npm install object-buffer --save
Property naming
ObjectBuffer
only considers properties prefixed with a ^
.
The structure is as follows:
^{propName}[{size}]@{dataIDPropName}<handler>
^{propName}[{size}]#{dataIDValue}<handler>
- propName – the property name to be created.
- size - size of the buffer.
- optional: dataIDPropName - property name of the data id.
- optional: dataIDValue - value of the data id.
- optional: handler - custom handler function.
Data ID value
The data ID value is needed when you want to flush the contents of a buffer.
The ObjectBuffer
library will clear the buffer as soon as the dataID
value has changed.
Example
{'^temp[3]#1': 1} // {'temp': [1, 0, 0]} ; dataID value is 1
{'^temp[3]#1': 2} // {'temp': [2, 1, 0]} ; dataID value is 1
{'^temp[3]#1': 3} // {'temp': [3, 2, 1]} ; dataID value is 1
{'^temp[3]#2': 9} // {'temp': [9, 0, 0]} ; dataID value is 2 -> buffer cleared
It is also possible to use the value of another property:
{'^temp[3]@id': 1, 'id': 1} // {'temp': [1, 0, 0]} ; dataID value is 1
{'^temp[3]@id': 2, 'id': 1} // {'temp': [2, 1, 0]} ; dataID value is 1
{'^temp[3]@id': 3, 'id': 1} // {'temp': [3, 2, 1]} ; dataID value is 1
{'^temp[3]@id': 9, 'id': 2} // {'temp': [9, 0, 0]} ; dataID value is 2 -> buffer cleared
Handler function
It is also possible to define a custom handler which will be invoked every time the buffered property is updated:
Example
{
'^temp[3]#id<handleTemp>': 1
}
let ObjectBufferInstance = new ObjectBuffer({
handleTemp(requestedSize, suggestedInitialValue) {
let instance = new ObjectBuffer.RingBuffer(requestedSize, suggestedInitialValue)
this.update = (value) => {
return instance.push(value).getAsArray()
}
}
})