UNPKG

atomicrecord

Version:

Super lightweight node.js ActiveRecord ORM layer for FoundationDB

99 lines (79 loc) 2.63 kB
var Pseudonym, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; Pseudonym = require('pseudonym'); /** * Create an AbstractRecord class * @method * @param {string} idName Record instance unique identifier name. * @param {string[]|object} fields AliasMap initializer. * @return {AbstractRecord} an AbstractRecord class */ module.exports = function(fields) { var AbstractRecord, aliases, dest, src; if (fields instanceof Array) { aliases = fields; } else { aliases = Object.create(null); for (src in fields) { dest = fields[src]; aliases[src] = dest; } } return AbstractRecord = (function(_super) { __extends(AbstractRecord, _super); AbstractRecord.prototype.changed = []; AbstractRecord.prototype.isLoaded = false; AbstractRecord.prototype.isNew = true; /** * Creates a new AbstractRecord instance * @class * @return {AbstractRecord} an AbstractRecord instance */ function AbstractRecord() { AbstractRecord.__super__.constructor.call(this); } /** * Resets the record instance state * @param {Boolean} isLoaded Flag if instance has had data loaded from store. * @return {undefined} */ AbstractRecord.prototype.reset = function(isLoaded) { this.isLoaded = isLoaded; this.isNew = !isLoaded; this.changed = []; }; /** * Overrides the Pseudonym prototype setValue method * @virtual * @param {string} src Source property name. * @param {object} val Value to set. * @return {string} Property alias. */ AbstractRecord.prototype.setValue = function(src, val) { var field; dest = AbstractRecord.__super__.setValue.call(this, src, val); if ((function() { var _i, _len, _ref, _results; _ref = this.changed; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { field = _ref[_i]; _results.push(field === src); } return _results; }).call(this)) { return; } this.changed.push(src); this.isNew = false; return dest; }; Object.defineProperty(AbstractRecord.prototype, 'isChanged', { get: function() { return this.changed.length > 0; } }); return AbstractRecord; })(Pseudonym(aliases)); };