[#291,bugfix][s]: memory backend transform function now works even when records do not have id - fixes #291.
* Also simplified (and made more efficient) by removing dependency on (not very useful) recline.Data.Transform.mapDocs function * As documented in #291 issue was that an id was required in the docs
This commit is contained in:
@@ -227,12 +227,15 @@ this.recline.Backend.Memory = this.recline.Backend.Memory || {};
|
|||||||
};
|
};
|
||||||
|
|
||||||
this.transform = function(editFunc) {
|
this.transform = function(editFunc) {
|
||||||
var toUpdate = recline.Data.Transform.mapDocs(this.data, editFunc);
|
var dfd = $.Deferred();
|
||||||
// TODO: very inefficient -- could probably just walk the documents and updates in tandem and update
|
// TODO: should we clone before mapping? Do not see the point atm.
|
||||||
_.each(toUpdate.updates, function(record, idx) {
|
self.data = _.map(self.data, editFunc);
|
||||||
self.data[idx] = record;
|
// now deal with deletes (i.e. nulls)
|
||||||
|
self.data = _.filter(self.data, function(record) {
|
||||||
|
return record != null;
|
||||||
});
|
});
|
||||||
return this.save(toUpdate);
|
dfd.resolve();
|
||||||
|
return dfd.promise();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -187,6 +187,31 @@ test('update and delete', function () {
|
|||||||
equal(data.data[0].x, memoryData[1].x);
|
equal(data.data[0].x, memoryData[1].x);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('transform', function () {
|
||||||
|
var data = [
|
||||||
|
{a: 1, b: " bla"},
|
||||||
|
{a: 2, b: "foo "},
|
||||||
|
{a: 3, b: "bar"}
|
||||||
|
];
|
||||||
|
var store = new recline.Backend.Memory.Store(data);
|
||||||
|
store.transform(function(d) {
|
||||||
|
d.a = d.a * 10;
|
||||||
|
return d;
|
||||||
|
})
|
||||||
|
equal(store.data[0].a, 10);
|
||||||
|
equal(store.data[1].a, 20);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('transform deletes', function () {
|
||||||
|
var data = [{a: 1, b: " bla"},{a: 2, b: "foo "},{a: 3, b: "bar"}];
|
||||||
|
var store = new recline.Backend.Memory.Store(data);
|
||||||
|
store.transform(function(d) {
|
||||||
|
if (d.a == '1') return null;
|
||||||
|
else return d;
|
||||||
|
})
|
||||||
|
equal(store.data.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
})(this.jQuery);
|
})(this.jQuery);
|
||||||
|
|
||||||
// ======================================
|
// ======================================
|
||||||
|
|||||||
Reference in New Issue
Block a user