From feaaf786393fb9bb62e69a47d660d7909785a9fd Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Sat, 26 May 2012 18:07:36 +0100 Subject: [PATCH] [#128,backend/gdocs][s]: minor refactoring to make cleaner and have it actually work. --- src/backend/gdocs.js | 30 +++++++++++++++++++----------- test/backend.test.js | 12 +++--------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/backend/gdocs.js b/src/backend/gdocs.js index 0dd0e669..c9449916 100644 --- a/src/backend/gdocs.js +++ b/src/backend/gdocs.js @@ -19,6 +19,7 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {}; // ); // my.Backbone = function() { + var self = this; this.__type__ = 'gdocs'; this.readonly = true; @@ -26,23 +27,31 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {}; var self = this; if (method === "read") { var dfd = $.Deferred(); - loadData(model.get('url')).done(function(result) { - model.fields.reset(result.fields); - // cache data onto dataset (we have loaded whole gdoc it seems!) - model._dataCache = result.data; - dfd.resolve(model); - }); + dfd.resolve(model); return dfd.promise(); } }; this.query = function(dataset, queryObj) { var dfd = $.Deferred(); - var fields = _.pluck(dataset.fields.toJSON(), 'id'); + if (dataset._dataCache) { + dfd.resolve(dataset._dataCache); + } else { + loadData(dataset.get('url')).done(function(result) { + dataset.fields.reset(result.fields); + // cache data onto dataset (we have loaded whole gdoc it seems!) + dataset._dataCache = self._formatResults(dataset, result.data); + dfd.resolve(dataset._dataCache); + }); + } + return dfd.promise(); + }; + this._formatResults = function(dataset, data) { + var fields = _.pluck(dataset.fields.toJSON(), 'id'); // zip the fields with the data rows to produce js objs // TODO: factor this out as a common method with other backends - var objs = _.map(dataset._dataCache, function (d) { + var objs = _.map(data, function (d) { var obj = {}; _.each(_.zip(fields, d), function (x) { obj[x[0]] = x[1]; @@ -55,8 +64,7 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {}; return { _source: row } }) } - dfd.resolve(out); - return dfd; + return out; }; }; @@ -78,7 +86,7 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {}; $.getJSON(url, function(d) { result = my.parseData(d); result.fields = _.map(result.fields, function(fieldId) { - return {id: fieldId}; + return {id: fieldId}; }); dfd.resolve(result); }); diff --git a/test/backend.test.js b/test/backend.test.js index e65e69bd..332ab6b9 100644 --- a/test/backend.test.js +++ b/test/backend.test.js @@ -68,7 +68,6 @@ test('DataProxy Backend', function() { // needed only if not stubbing // stop(); var backend = new recline.Backend.DataProxy.Backbone(); - console.log(backend.readonly); ok(backend.readonly); equal(backend.__type__, 'dataproxy'); @@ -288,15 +287,10 @@ test("GDocs Backend", function() { } }); - dataset.fetch().then(function(dataset) { + dataset.query().then(function(docList) { deepEqual(['column-2', 'column-1'], _.pluck(dataset.fields.toJSON(), 'id')); - //equal(null, dataset.docCount) - dataset.query().then(function(docList) { - equal(3, docList.length); - equal("A", docList.models[0].get('column-1')); - // needed only if not stubbing - start(); - }); + equal(3, docList.length); + equal("A", docList.models[0].get('column-1')); }); $.getJSON.restore(); });