118 lines
3.3 KiB
JavaScript
Executable File
118 lines
3.3 KiB
JavaScript
Executable File
"use strict";
|
|
/**
|
|
* @fileOverview A model is the first level if usable data-bearing entity in the system. It does NOT include any verbs for saving or anything like
|
|
* that, it is a pure, in memory data container
|
|
* @module documents/model
|
|
* @require base
|
|
* @require documents/probe
|
|
* @require lodash
|
|
*/
|
|
|
|
var Base = require( "../base" );
|
|
var probe = require( "./probe" );
|
|
var sys = require( "lodash" );
|
|
/**
|
|
* A model is the first level if usable data-bearing entity in the system. It does NOT include any verbs for saving or anything like
|
|
* that, it is a pure, in memory data container
|
|
* @exports documents/model
|
|
* @constructor
|
|
* @borrows module:documents/probe.get as get
|
|
* @borrows module:documents/probe.set as set
|
|
* @borrows module:documents/probe.any as any
|
|
* @borrows module:documents/probe.all as all
|
|
* @borrows module:documents/probe.remove as remove
|
|
* @borrows module:documents/probe.seekKey as seekKey
|
|
* @borrows module:documents/probe.seek as seek
|
|
* @borrows module:documents/probe.findOne as findOne
|
|
* @borrows module:documents/probe.findOneKey as findOneKey
|
|
* @borrows module:documents/probe.findKeys as findKeys
|
|
* @borrows module:documents/probe.find as find
|
|
* @borrows module:documents/probe.update as update
|
|
* @borrows module:documents/probe.some as some
|
|
* @borrows module:documents/probe.every as every
|
|
*/
|
|
var Model = Base.compose( [Base], /** @lends documents/model# */{
|
|
constructor : function () {
|
|
var that = this;
|
|
probe.mixin( this );
|
|
|
|
var idField = "_id";
|
|
/**
|
|
* The name of the field that uniquely identifies a record. When provided, some operations will take advantage of it
|
|
*
|
|
* @name _idField
|
|
* @memberOf documents/model#
|
|
* @type {string}
|
|
* @private
|
|
*/
|
|
Object.defineProperty( this, "_idField", {
|
|
get : function () {
|
|
return idField;
|
|
},
|
|
set : function ( val ) {
|
|
idField = val;
|
|
},
|
|
configurable : false,
|
|
enumerable : true,
|
|
writable : true
|
|
} );
|
|
|
|
/**
|
|
* The value of the primary key if {@link documents/model#_idField} is filled in. It will be null if none found
|
|
*
|
|
* @name _pkey
|
|
* @memberOf documents/model#
|
|
* @type {*}
|
|
* @private
|
|
*/
|
|
Object.defineProperty( this, "_pkey", {
|
|
get : function () {
|
|
var val;
|
|
if ( !sys.isEmpty( that._idField ) ) {
|
|
val = that[that._idField];
|
|
}
|
|
return val;
|
|
},
|
|
set : function ( val ) {
|
|
if ( !sys.isEmpty( that._idField ) ) {
|
|
that[that._idField] = val;
|
|
}
|
|
},
|
|
configurable : false,
|
|
enumerable : true,
|
|
writable : true
|
|
} );
|
|
|
|
/**
|
|
* If {@link documents/model#_idField} is filled in and it's value is empty this will be true.
|
|
* @type {boolean}
|
|
* @name isNew
|
|
* @memberOf documents/model#
|
|
*/
|
|
Object.defineProperty( this, "isNew", {
|
|
get : function () {
|
|
return !sys.isEmpty( that._idField ) && !sys.isEmpty( that[that._idField] )
|
|
},
|
|
configurable : false,
|
|
enumerable : true,
|
|
writable : false
|
|
} );
|
|
|
|
/**
|
|
* Returns true if this instance is empty
|
|
* @type {boolean}
|
|
* @name isEmpty
|
|
* @memberOf documents/model#
|
|
*/
|
|
Object.defineProperty( this, "isEmpty", {
|
|
get : function () {
|
|
return sys.isEmpty( that );
|
|
},
|
|
configurable : false,
|
|
enumerable : true,
|
|
writable : false
|
|
} );
|
|
}
|
|
} );
|
|
module.exports = Model;
|