118 lines
3.3 KiB
JavaScript
118 lines
3.3 KiB
JavaScript
|
"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;
|