From 4d128af797546e5174537d8ed530a243e444eeab Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Sun, 2 Jun 2013 20:04:09 +0100 Subject: [PATCH] [model,bugfix][s]: if explicitly passed field info to a dataset use that over any field info derived from backend. --- src/model.js | 8 +++++++- test/model.test.js | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/model.js b/src/model.js index 40f92532..5649b1d8 100644 --- a/src/model.js +++ b/src/model.js @@ -71,7 +71,13 @@ my.Dataset = Backbone.Model.extend({ } function handleResults(results) { - var out = self._normalizeRecordsAndFields(results.records, results.fields); + // if explicitly given the fields + // (e.g. var dataset = new Dataset({fields: fields, ...}) + // use that field info over anything we get back by parsing the data + // (results.fields) + var fields = self.get('fields') || results.fields; + + var out = self._normalizeRecordsAndFields(results.records, fields); if (results.useMemoryStore) { self._store = new recline.Backend.Memory.Store(out.records, out.fields); } diff --git a/test/model.test.js b/test/model.test.js index e3179dac..42f9c436 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -177,6 +177,25 @@ test('Dataset getFieldsSummary', function () { }); }); +test('fetch without and with explicit fields', function () { + var dataset = new recline.Model.Dataset({ + backend: 'csv', + data: 'A,B\n1,2\n3,4' + }); + dataset.fetch(); + equal(dataset.fields.at(0).id, 'A'); + equal(dataset.fields.at(0).get('type'), 'string'); + + var dataset = new recline.Model.Dataset({ + fields: [{id: 'X', type: 'number'}, {id: 'Y'}], + backend: 'csv', + data: 'A,B\n1,2\n3,4' + }); + dataset.fetch(); + equal(dataset.fields.at(0).id, 'X'); + equal(dataset.fields.at(0).get('type'), 'number'); +}); + test('_normalizeRecordsAndFields', function () { var data = [ // fields but no records