From cb81fe87aff266e148428fbb5895552c4e66769f Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Tue, 27 Mar 2012 17:02:13 +0100 Subject: [PATCH] [#51,backend/memory][s]: simple createDataset method to create in-memory dataset from raw array of hashes (and optional other info). --- src/backend/memory.js | 37 +++++++++++++++++++++++++++++++++++++ test/backend.test.js | 11 +++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/backend/memory.js b/src/backend/memory.js index 6da45b6b..1af3a7f0 100644 --- a/src/backend/memory.js +++ b/src/backend/memory.js @@ -2,6 +2,43 @@ this.recline = this.recline || {}; this.recline.Backend = this.recline.Backend || {}; (function($, my) { + // ## createDataset + // + // Convenience function to create a simple 'in-memory' dataset in one step. + // + // @param data: list of hashes for each document/row in the data ({key: + // value, key: value}) + // @param fields: (optional) list of field hashes (each hash defining a hash + // as per recline.Model.Field). If fields not specified they will be taken + // from the data. + // @param metadata: (optional) dataset metadata - see recline.Model.Dataset. + // If not defined (or id not provided) id will be autogenerated. + my.createDataset = function(data, fields, metadata) { + if (!metadata) { + var metadata = {}; + } + if (!metadata.id) { + metadata.id = String(Math.floor(Math.random() * 100000000) + 1); + } + var backend = recline.Model.backends['memory']; + var datasetInfo = { + documents: data, + metadata: metadata + }; + if (fields) { + datasetInfo.fields = fields; + } else { + if (data) { + datasetInfo.fields = _.keys(data[0]); + } + } + backend.addDataset(datasetInfo); + var dataset = new recline.Model.Dataset({id: metadata.id}, 'memory'); + dataset.fetch(); + return dataset; + }; + + // ## Memory Backend - uses in-memory data // // To use it you should provide in your constructor data: diff --git a/test/backend.test.js b/test/backend.test.js index e5b1f7cf..27e0bd53 100644 --- a/test/backend.test.js +++ b/test/backend.test.js @@ -25,6 +25,17 @@ function makeBackendDataset() { return dataset; } +test('Memory Backend: createDataset', function () { + var dataset = recline.Backend.createDataset(memoryData.documents, memoryData.fields, memoryData.metadata); + equal(memoryData.metadata.id, dataset.id); +}); + +test('Memory Backend: createDataset 2', function () { + var dataset = recline.Backend.createDataset(memoryData.documents); + dataset.query(); + equal(memoryData.documents.length, dataset.currentDocuments.length); +}); + test('Memory Backend: basics', function () { var dataset = makeBackendDataset(); expect(3);