UNPKG

neo4j-fiber

Version:

Most advanced and efficient Neo4j REST API Driver, with support of https and GrapheneDB

95 lines (84 loc) 2.63 kB
var _ = require('./helpers')._; /* @locus Server @summary Represents Data state, relations, and data Represents as Nodes and Relationships, as well Might be reactive data source, if `_isReactive` passed as `true` - data of node will be updated before returning Usually not used directly, it is returned inside of Neo4jCursor instance until `fetch()` or `forEach` methods is called, then it's returned as plain object. @class Neo4jData */ function Neo4jData (n, _isReactive, _expiration) { this._isReactive = _isReactive != null ? _isReactive : false; this._expiration = _expiration != null ? _expiration : 0; this.node = n; this.__refresh(); } Neo4jData.prototype.__refresh = function () { this._expire = (+new Date()) + (this._expiration * 1000); }; Neo4jData.define('node', { get: function () { if (this._isReactive && this._expire < +new Date()) { return this.update()._node; } return this._node; }, set: function (value) { var v1, v2; if (this._node && this._node._service) { v1 = _.clone(this._node); delete v1._service; } else if (_.isObject(this._node)) { v1 = _.clone(this._node); } else { v1 = this._node; } if (value && value._service) { v2 = _.clone(value); delete v2._service; } else if (_.isObject(value)) { v2 = _.clone(value); } else { v2 = value; } if (JSON.stringify(v1) !== JSON.stringify(v2)) { if (value && value._service) { this._service = _.clone(value._service); delete value._service; } this._node = value; } } }); /* @locus Server @summary Get Neo4j data, if data was requested with REST data and it's reactive, will return updated data @name get @class Neo4jData @url http://neo4j.com/docs/2.2.5/rest-api-nodes.html#rest-api-get-node @returns {Object | [Object] | [String]} - Depends from cypher query */ Neo4jData.prototype.get = function () { return this.node; }; /* @locus Server @summary Update Neo4j data, only if data was requested as REST and instance is reactive @name update @class Neo4jData @url http://neo4j.com/docs/2.2.5/rest-api-nodes.html#rest-api-get-node @param {Boolean} force - Force node's data update @returns {Object | [Object] | [String]} - Depends from cypher query */ Neo4jData.prototype.update = function (force) { if (force == null) { force = false; } if (this._node && this._service && (this._isReactive || force)) { this.__refresh(); this.node = this._service.self.__getAndProceed('__parseNode'); } return this; }; module.exports = Neo4jData;