Skip to content

Commit a828f85

Browse files
committed
fix arrays with undefined value
1 parent c340162 commit a828f85

File tree

6 files changed

+34
-9
lines changed

6 files changed

+34
-9
lines changed

build/app.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,9 @@ function ActiveRecord(model, name) {
107107
/** Unless it is marked nested */
108108
!(field.nested || _.isArray(field) && field[0].nested)) {
109109
if (_.isArray(field)) {
110-
toSave = _this[key].map(function (entry) {
110+
toSave = _this[key].filter(function (e) {
111+
return !_.isUndefined(e);
112+
}).map(function (entry) {
111113
return typeof entry === 'string' ? entry : entry._id;
112114
});
113115
} else {
@@ -323,8 +325,10 @@ function ActiveRecord(model, name) {
323325
* */
324326
} else if (field.nested || _.isArray(field) && field[0].nested) {
325327
if (_.isArray(field)) {
326-
obj[key] = obj[key].map(function (e) {
327-
return e.beforeSave(null, { force: true });
328+
obj[key] = obj[key].filter(function (e) {
329+
return !_.isUndefined(e);
330+
}).map(function (e) {
331+
return e.beforeSave ? e.beforeSave(null, { force: true }) : e;
328332
});
329333
} else {
330334
if (obj[key] && obj[key] !== null) {

dest/temp/ActiveRecord.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,9 @@ function ActiveRecord(model, name) {
106106
/** Unless it is marked nested */
107107
!(field.nested || _.isArray(field) && field[0].nested)) {
108108
if (_.isArray(field)) {
109-
toSave = _this[key].map(function (entry) {
109+
toSave = _this[key].filter(function (e) {
110+
return !_.isUndefined(e);
111+
}).map(function (entry) {
110112
return typeof entry === 'string' ? entry : entry._id;
111113
});
112114
} else {
@@ -322,8 +324,10 @@ function ActiveRecord(model, name) {
322324
* */
323325
} else if (field.nested || _.isArray(field) && field[0].nested) {
324326
if (_.isArray(field)) {
325-
obj[key] = obj[key].map(function (e) {
326-
return e.beforeSave(null, { force: true });
327+
obj[key] = obj[key].filter(function (e) {
328+
return !_.isUndefined(e);
329+
}).map(function (e) {
330+
return e.beforeSave ? e.beforeSave(null, { force: true }) : e;
327331
});
328332
} else {
329333
if (obj[key] && obj[key] !== null) {

dest/temp/specs/angular-dao-base.specs.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,12 @@ describe('Angular DAO Basics', function () {
8787
});
8888
httpBackend.flush();
8989
});
90+
91+
it('Should not fail when a nested property is undefined', function () {
92+
var m = ModelManager.create({
93+
_id: "111",
94+
models2: [{ _id: "121212" }, undefined, { _id: null }, null],
95+
model2: undefined
96+
});
97+
});
9098
});

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"author": "flogou <florent.gouget@gmail.com>",
33
"name": "angular-orm",
4-
"version": "2.0.0",
4+
"version": "2.0.1",
55
"description": "",
66
"homepage": "",
77
"dependencies": {

src/ActiveRecord.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export default function ActiveRecord (model, name, SManager = SessionManager(mod
7373
/** Unless it is marked nested */
7474
&& !(field.nested || (_.isArray(field) && field[ 0 ].nested))) {
7575
if (_.isArray(field)) {
76-
toSave = this[ key ].map(entry => (typeof entry === 'string') ? entry : entry._id)
76+
toSave = this[ key ].filter(e => !_.isUndefined(e)).map(entry => (typeof entry === 'string') ? entry : entry._id)
7777
} else {
7878
toSave = typeof this[ key ] === 'string' ? this[ key ] : this[ key ]._id
7979
}
@@ -279,7 +279,9 @@ export default function ActiveRecord (model, name, SManager = SessionManager(mod
279279
* */
280280
} else if (field.nested || (_.isArray(field) && field[ 0 ].nested )) {
281281
if (_.isArray(field)) {
282-
obj[ key ] = obj[ key ].map(e => e.beforeSave(null, { force: true }))
282+
obj[ key ] = obj[ key ]
283+
.filter(e => !_.isUndefined(e))
284+
.map(e => e.beforeSave ? e.beforeSave(null, { force: true }) : e)
283285
} else {
284286
if (obj[ key ] && obj[ key ] !== null) {
285287
obj[ key ] = obj[ key ].beforeSave(null, { force: true })

tst/specs/angular-dao-base.specs.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,14 @@ describe('Angular DAO Basics', function () {
8686
expect(data).toEqual({data: []})
8787
});
8888
httpBackend.flush();
89+
})
8990

91+
it ('Should not fail when a nested property is undefined', function(){
92+
var m = ModelManager.create({
93+
_id: "111",
94+
models2: [{_id: "121212"}, undefined, {_id: null}, null],
95+
model2: undefined
96+
})
9097
})
9198

9299
});

0 commit comments

Comments
 (0)