ogm
Version:
OGM for OrientDB
237 lines (199 loc) • 7.2 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
var _bind = Function.prototype.bind;
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _2 = require('./');
var V = (function () {
function V(obj) {
_classCallCheck(this, V);
if (obj && typeof obj === 'object') {
this.object = obj;
}
}
_createClass(V, [{
key: 'select',
value: function select(s) {
if (!this['@rid']) {
throw new Error('Cannot query from unsaved vertex!');
}
return _2.session.db.select(s).from(this['@rid']);
}
}, {
key: 'selectNeighbour',
value: function selectNeighbour(dir, cl) {
var exp = '';
//TODO: handlig object criterias
for (var _len = arguments.length, criterions = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
criterions[_key - 2] = arguments[_key];
}
criterions.forEach(function (criteria) {
exp += '[' + criteria + ']';
});
var clName = typeof cl === 'string' ? cl : cl._OGM_CLASS_NAME;
return this.select('expand(' + dir + '(' + clName + ')' + exp + ')');
}
}, {
key: 'outV',
value: function outV(edge) {
for (var _len2 = arguments.length, criterions = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
criterions[_key2 - 1] = arguments[_key2];
}
return this.selectNeighbour.apply(this, ['out', edge].concat(criterions));
}
}, {
key: 'inV',
value: function inV(edge) {
for (var _len3 = arguments.length, criterions = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
criterions[_key3 - 1] = arguments[_key3];
}
return this.selectNeighbour.apply(this, ['in', edge].concat(criterions));
}
}, {
key: 'bothV',
value: function bothV(edge) {
for (var _len4 = arguments.length, criterions = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
criterions[_key4 - 1] = arguments[_key4];
}
return this.selectNeighbour.apply(this, ['both', edge].concat(criterions));
}
}, {
key: 'outE',
value: function outE(edge) {
for (var _len5 = arguments.length, criterions = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
criterions[_key5 - 1] = arguments[_key5];
}
return this.selectNeighbour.apply(this, ['outE', edge].concat(criterions));
}
}, {
key: 'inE',
value: function inE(edge) {
for (var _len6 = arguments.length, criterions = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {
criterions[_key6 - 1] = arguments[_key6];
}
return this.selectNeighbour.apply(this, ['inE', edge].concat(criterions));
}
}, {
key: 'bothE',
value: function bothE(edge) {
for (var _len7 = arguments.length, criterions = Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
criterions[_key7 - 1] = arguments[_key7];
}
return this.selectNeighbour.apply(this, ['bothE', edge].concat(criterions));
}
}, {
key: 'save',
value: function save() {
var obj;
return regeneratorRuntime.async(function save$(context$2$0) {
while (1) switch (context$2$0.prev = context$2$0.next) {
case 0:
if (!this['@rid']) {
context$2$0.next = 4;
break;
}
return context$2$0.abrupt('return', _2.session.db.update(this['@rid']).set(this.object).scalar());
case 4:
context$2$0.next = 6;
return regeneratorRuntime.awrap(_2.session.db.insert().into(this._OGM_CLASS_NAME).set(this.object).one());
case 6:
obj = context$2$0.sent;
this.object = obj;
return context$2$0.abrupt('return', obj);
case 9:
case 'end':
return context$2$0.stop();
}
}, null, this);
}
}, {
key: 'delete',
value: function _delete() {
return this.constructor['delete'](this['@rid']);
}
}, {
key: 'object',
get: function get() {
var _this = this;
var r = {};
this._OGM_PROPS.forEach((function (prop) {
r[prop.name] = _this[prop.name];
}).bind(this));
return r;
},
set: function set(value) {
var _this2 = this;
Object.keys(value).forEach((function (key) {
_this2[key] = value[key];
}).bind(this));
}
}], [{
key: 'sync',
value: function sync() {
var Class;
return regeneratorRuntime.async(function sync$(context$2$0) {
while (1) switch (context$2$0.prev = context$2$0.next) {
case 0:
context$2$0.next = 2;
return regeneratorRuntime.awrap(_2.session.db['class'].create(this._OGM_CLASS_NAME, this.__proto__._OGM_CLASS_NAME));
case 2:
Class = context$2$0.sent;
return context$2$0.abrupt('return', Class);
case 4:
case 'end':
return context$2$0.stop();
}
}, null, this);
}
}, {
key: 'get',
value: function get(rid) {
return _2.session.db.record.get(rid);
}
}, {
key: 'select',
value: function select(s) {
return _2.session.db.select(s).from(this._OGM_CLASS_NAME);
}
}, {
key: 'query',
value: function query(q) {
var r = _2.session.db.select().from(this._OGM_CLASS_NAME);
if (q && !_lodash2['default'].isEmpty(q)) {
r = r.where(q);
}
return r;
}
}, {
key: 'create',
value: function create() {
for (var _len8 = arguments.length, args = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {
args[_key8] = arguments[_key8];
}
var vertex = new (_bind.apply(this, [null].concat(args)))();
return vertex.save();
}
}, {
key: 'delete',
value: function _delete(q) {
if ((0, _2.isRid)(q + '')) {
return _2.session.db.record['delete'](q);
} else {
var r = _2.session.db['delete']().from(this._OGM_CLASS_NAME);
if (q) {
r = r.where(q);
}
return r;
}
}
}]);
return V;
})();
exports['default'] = V;
module.exports = exports['default'];
//TODO: Checking for class existence and syncing properties