Subclass of MessengerAPI that is used to translate messages of Messenger on ModelPath to Messenger on Model.
var ModelPathMsgAPI = _.createSubclass(MessengerAPI, 'ModelPathMsgAPI');
module.exports = ModelPathMsgAPI;
fullPath
property to message data_.extendProto(ModelPathMsgAPI, {
init: init,
translateToSourceMessage: translateToSourceMessage,
createInternalData: createInternalData,
});
Option name | Type | Description |
---|---|---|
rootPath | String | root path of model path |
ModelPathMsgAPI instance method
Called by MessengerAPI constructor.
function init(rootPath) {
MessengerAPI.prototype.init.apply(this, arguments);
this.rootPath = rootPath;
}
Option name | Type | Description |
---|---|---|
accessPath | String | relative access path to be translated |
return | String |
ModelPathMsgAPI instance method
Translates relative access paths of ModelPath to full path of Model.
function translateToSourceMessage(message) {
// TODO should prepend RegExes
// TODO should not prepend changedata too???
if (message instanceof RegExp)
return message;
if (message == 'datachanges')
return message;
return this.rootPath + message;
}
Option name | Type | Description |
---|---|---|
sourceMessage | String | full access path on Model |
message | String | relative access path on ModelPath |
sourceData | Object | data received from Model, will be translated as described to be dispatched to ModelPath |
return | Object |
ModelPathMsgAPI instance method
Changes path in message on model to relative path and adds fullPath
property to message data.
function createInternalData(sourceMessage, message, sourceData) {
// TODO return on changedata too???
if (message == 'datachanges') {
var internalChanges = sourceData.changes
.map(truncateChangePath, this)
.filter(function(change) { return change; });
var internalData = {
changes: internalChanges,
transaction: sourceData.transaction
};
return internalData
}
var internalData = truncateChangePath.call(this, sourceData);
return internalData;
}
function truncateChangePath(change) {
var fullPath = change.path
, path = _.unPrefix(fullPath, this.rootPath);
if (typeof path == 'string') {
var change = _.clone(change);
change.fullPath = fullPath;
change.path = path;
return change;
}
}