List API improvements
This commit is contained in:
parent
e0f5f45b05
commit
c8b8012e28
|
@ -66,7 +66,7 @@ AbstractClass.prototype._initProperties = function (data, applySetters) {
|
||||||
var type = properties[attr].type;
|
var type = properties[attr].type;
|
||||||
|
|
||||||
if (BASE_TYPES.indexOf(type.name) === -1) {
|
if (BASE_TYPES.indexOf(type.name) === -1) {
|
||||||
if (typeof this[_attr] !== 'object') {
|
if (typeof this[_attr] !== 'object' && this[_attr]) {
|
||||||
try {
|
try {
|
||||||
this[_attr] = JSON.parse(this[_attr] + '');
|
this[_attr] = JSON.parse(this[_attr] + '');
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
@ -149,7 +149,7 @@ AbstractClass.whatTypeName = function (propName) {
|
||||||
AbstractClass._forDB = function (data) {
|
AbstractClass._forDB = function (data) {
|
||||||
var res = {};
|
var res = {};
|
||||||
Object.keys(data).forEach(function (propName) {
|
Object.keys(data).forEach(function (propName) {
|
||||||
if (this.whatTypeName(propName) === 'JSON') {
|
if (this.whatTypeName(propName) === 'JSON' || data[propName] instanceof Array) {
|
||||||
res[propName] = JSON.stringify(data[propName]);
|
res[propName] = JSON.stringify(data[propName]);
|
||||||
} else {
|
} else {
|
||||||
res[propName] = data[propName];
|
res[propName] = data[propName];
|
||||||
|
|
90
lib/list.js
90
lib/list.js
|
@ -25,8 +25,12 @@ function List(data, type, parent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
data.forEach(function (item, i) {
|
data.forEach(function (item, i) {
|
||||||
data[i] = new Item(item, parent);
|
data[i] = new Item(item, list);
|
||||||
list[data[i].id] = data[i];
|
Object.defineProperty(list, data[i].id, {
|
||||||
|
writable: true,
|
||||||
|
enumerable: false,
|
||||||
|
value: data[i]
|
||||||
|
});
|
||||||
if (list.nextid <= data[i].id) {
|
if (list.nextid <= data[i].id) {
|
||||||
list.nextid = data[i].id + 1;
|
list.nextid = data[i].id + 1;
|
||||||
}
|
}
|
||||||
|
@ -44,20 +48,81 @@ function List(data, type, parent) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _;
|
||||||
|
try {
|
||||||
|
_ = require('underscore');
|
||||||
|
} catch (e) {
|
||||||
|
_ = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_) {
|
||||||
|
var _import = [
|
||||||
|
// collection methods
|
||||||
|
'each',
|
||||||
|
'map',
|
||||||
|
'reduce',
|
||||||
|
'reduceRight',
|
||||||
|
'find',
|
||||||
|
'filter',
|
||||||
|
'reject',
|
||||||
|
'all',
|
||||||
|
'any',
|
||||||
|
'include',
|
||||||
|
'invoke',
|
||||||
|
'pluck',
|
||||||
|
'max',
|
||||||
|
'min',
|
||||||
|
'sortBy',
|
||||||
|
'groupBy',
|
||||||
|
'sortedIndex',
|
||||||
|
'shuffle',
|
||||||
|
'toArray',
|
||||||
|
'size',
|
||||||
|
// array methods
|
||||||
|
'first',
|
||||||
|
'initial',
|
||||||
|
'last',
|
||||||
|
'rest',
|
||||||
|
'compact',
|
||||||
|
'flatten',
|
||||||
|
'without',
|
||||||
|
'union',
|
||||||
|
'intersection',
|
||||||
|
'difference',
|
||||||
|
'uniq',
|
||||||
|
'zip',
|
||||||
|
'indexOf',
|
||||||
|
'lastIndexOf',
|
||||||
|
'range'
|
||||||
|
];
|
||||||
|
|
||||||
|
_import.forEach(function (name) {
|
||||||
|
List.prototype[name] = function () {
|
||||||
|
var args = [].slice.call(arguments);
|
||||||
|
args.unshift(this.items);
|
||||||
|
return _[name].apply(_, args);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
List.prototype.toObject = function () {
|
List.prototype.toObject = function () {
|
||||||
return this.items;
|
return this.items;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
List.prototype.toJSON = function () {
|
||||||
|
return this.items;
|
||||||
|
};
|
||||||
|
|
||||||
|
List.prototype.toString = function () {
|
||||||
|
return JSON.stringify(this.items);
|
||||||
|
};
|
||||||
|
|
||||||
List.prototype.autoincrement = function () {
|
List.prototype.autoincrement = function () {
|
||||||
return this.nextid++;
|
return this.nextid++;
|
||||||
};
|
};
|
||||||
|
|
||||||
List.prototype.push = function (obj) {
|
List.prototype.push = function (obj) {
|
||||||
var item = new ListItem(obj, this);
|
var item = new ListItem(obj, this);
|
||||||
if (this.ItemType) {
|
|
||||||
item.__proto__ = this.ItemType.prototype;
|
|
||||||
}
|
|
||||||
item.id = this.autoincrement();
|
|
||||||
this.items.push(item);
|
this.items.push(item);
|
||||||
return item;
|
return item;
|
||||||
};
|
};
|
||||||
|
@ -99,5 +164,18 @@ function ListItem(data, parent) {
|
||||||
configurable: true,
|
configurable: true,
|
||||||
value: parent
|
value: parent
|
||||||
});
|
});
|
||||||
|
if (!this.id) {
|
||||||
|
this.id = parent.autoincrement();
|
||||||
|
}
|
||||||
|
if (parent.ItemType) {
|
||||||
|
this.__proto__ = parent.ItemType.prototype;
|
||||||
|
if (parent.ItemType !== ListItem) {
|
||||||
|
parent.ItemType.apply(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.save = function (c) {
|
||||||
|
parent.parent.save(c);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "jugglingdb",
|
"name": "jugglingdb",
|
||||||
"description": "ORM for every database: redis, mysql, neo4j, mongodb, postgres, sqlite",
|
"description": "ORM for every database: redis, mysql, neo4j, mongodb, postgres, sqlite",
|
||||||
"version": "0.1.17",
|
"version": "0.1.18",
|
||||||
"author": "Anatoliy Chakkaev <rpm1602@gmail.com>",
|
"author": "Anatoliy Chakkaev <rpm1602@gmail.com>",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
{ "name": "Anatoliy Chakkaev", "email": "rpm1602@gmail.com" },
|
{ "name": "Anatoliy Chakkaev", "email": "rpm1602@gmail.com" },
|
||||||
|
|
|
@ -17,7 +17,7 @@ var schemas = {
|
||||||
database: ':memory:'
|
database: ':memory:'
|
||||||
},
|
},
|
||||||
neo4j: { url: 'http://localhost:7474/' },
|
neo4j: { url: 'http://localhost:7474/' },
|
||||||
mongoose: { url: 'mongodb://travis:test@localhost:27017/myapp' },
|
// mongoose: { url: 'mongodb://travis:test@localhost:27017/myapp' },
|
||||||
mongodb: { url: 'mongodb://travis:test@localhost:27017/myapp' },
|
mongodb: { url: 'mongodb://travis:test@localhost:27017/myapp' },
|
||||||
redis2: {},
|
redis2: {},
|
||||||
memory: {}
|
memory: {}
|
||||||
|
|
Loading…
Reference in New Issue