From 481282708c645d31d847e3001fc8a01105cbe08b Mon Sep 17 00:00:00 2001 From: Mariusz Nowak Date: Wed, 22 Jan 2014 10:48:06 +0100 Subject: [PATCH] `isDbjsObject` and `validDbjsObject` --- is-dbjs-nested-object.js | 6 +++--- is-dbjs-object.js | 8 ++++++++ test/is-dbjs-object.js | 19 +++++++++++++++++++ test/valid-dbjs-object.js | 23 +++++++++++++++++++++++ valid-dbjs-object.js | 8 ++++++++ 5 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 is-dbjs-object.js create mode 100644 test/is-dbjs-object.js create mode 100644 test/valid-dbjs-object.js create mode 100644 valid-dbjs-object.js diff --git a/is-dbjs-nested-object.js b/is-dbjs-nested-object.js index 2311a7c..964f6e7 100644 --- a/is-dbjs-nested-object.js +++ b/is-dbjs-nested-object.js @@ -1,11 +1,11 @@ 'use strict'; -var startsWith = require('es5-ext/string/#/starts-with') - , isDbjsKind = require('./is-dbjs-kind'); +var startsWith = require('es5-ext/string/#/starts-with') + , isDbjsObject = require('./is-dbjs-object'); module.exports = function (value/*, owner*/) { var owner = arguments[1]; - if (!isDbjsKind(value)) return false; + if (!isDbjsObject(value)) return false; if (!value.owner || !value.owner.__id__) return false; if (!startsWith.call(value.__id__, value.owner.__id__ + '/')) return false; if (owner == null) return true; diff --git a/is-dbjs-object.js b/is-dbjs-object.js new file mode 100644 index 0000000..b75e87f --- /dev/null +++ b/is-dbjs-object.js @@ -0,0 +1,8 @@ +'use strict'; + +var hasOwnProperty = Object.prototype.hasOwnProperty; + +module.exports = function (value) { + return (value && hasOwnProperty.call(value, '__id__') && + (value._kind_ === 'object')) || false; +}; diff --git a/test/is-dbjs-object.js b/test/is-dbjs-object.js new file mode 100644 index 0000000..99baf67 --- /dev/null +++ b/test/is-dbjs-object.js @@ -0,0 +1,19 @@ +'use strict'; + +var Database = require('../'); + +module.exports = function (t, a) { + var db = new Database(), obj = new db.Object(); + + a(t(), false, "Undefined"); + a(t(null), false, "Null"); + a(t('raz'), false, "String"); + a(t(2342), false, "Number"); + a(t(new Date()), false, "Date"); + a(t(new db.DateTime()), false, "Date out of database"); + a(t({}), false, "Plain object"); + a(t(obj), true, "Db object"); + a(t(obj.$getOwn('test')), false, "Db descriptor"); + a(t(obj.$getOwn('test').$getOwn('raz')), false, "Db descriptor's descriptor"); + a(t(obj._getMultiple_('test').$getOwn('raz')), false, "Db item"); +}; diff --git a/test/valid-dbjs-object.js b/test/valid-dbjs-object.js new file mode 100644 index 0000000..9ed5b40 --- /dev/null +++ b/test/valid-dbjs-object.js @@ -0,0 +1,23 @@ +'use strict'; + +var Database = require('../'); + +module.exports = function (t, a) { + var db = new Database(), obj = new db.Object(), desc, item; + + a.throws(function () { t(); }, TypeError, "Undefined"); + a.throws(function () { t(null); }, TypeError, "Null"); + a.throws(function () { t('raz'); }, TypeError, "String"); + a.throws(function () { t(2342); }, TypeError, "Number"); + a.throws(function () { t(new Date()); }, TypeError, "Date"); + a.throws(function () { t(new db.DateTime()); }, TypeError, + "Date out of database"); + a.throws(function () { t({}); }, TypeError, "Plain object"); + a(t(obj), obj, "Db object"); + desc = obj.$getOwn('test'); + a.throws(function () { t(desc); }, TypeError, "Db descriptor"); + desc = desc.$getOwn('raz'); + a.throws(function () { t(desc); }, TypeError, "Db descriptor's descriptor"); + item = obj._getMultiple_('test').$getOwn('raz'); + a.throws(function () { t(item); }, TypeError, "Db item"); +}; diff --git a/valid-dbjs-object.js b/valid-dbjs-object.js new file mode 100644 index 0000000..71f7de6 --- /dev/null +++ b/valid-dbjs-object.js @@ -0,0 +1,8 @@ +'use strict'; + +var isDbjsObject = require('./is-dbjs-object'); + +module.exports = function (value) { + if (isDbjsObject(value)) return value; + throw new TypeError(value + " is not dbjs object"); +};