From dd4fbeceb5be32ebe3242f3b9b10de122f914ed5 Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Thu, 15 Mar 2012 00:24:21 +0000 Subject: [PATCH] [backend/gdocs][s]: support being given standard 'user' gdocs url by extracting spreadsheet key and generating url with it. * This makes gdocs backend much easier to use! --- src/backend/gdocs.js | 22 +++++++++++++++++++++- test/backend.test.js | 11 +++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/backend/gdocs.js b/src/backend/gdocs.js index 9436fd51..ff2c6444 100644 --- a/src/backend/gdocs.js +++ b/src/backend/gdocs.js @@ -17,13 +17,33 @@ this.recline.Backend = this.recline.Backend || {}; // ); // my.GDoc = Backbone.Model.extend({ + getUrl: function(dataset) { + var url = dataset.get('url'); + if (url.indexOf('feeds/list') != -1) { + return url; + } else { + // https://docs.google.com/spreadsheet/ccc?key=XXXX#gid=0 + var regex = /.*spreadsheet\/ccc?.*key=([^#?&+]+).*/ + var matches = url.match(regex); + if (matches) { + var key = matches[1]; + var worksheet = 1; + var out = 'https://spreadsheets.google.com/feeds/list/' + key + '/' + worksheet + '/public/values?alt=json' + return out; + } else { + alert('Failed to extract gdocs key from ' + url); + } + } + }, sync: function(method, model, options) { var self = this; if (method === "read") { var dfd = $.Deferred(); var dataset = model; - $.getJSON(model.get('url'), function(d) { + var url = this.getUrl(model); + + $.getJSON(url, function(d) { result = self.gdocsToJavascript(d); model.fields.reset(_.map(result.field, function(fieldId) { return {id: fieldId}; diff --git a/test/backend.test.js b/test/backend.test.js index a131b9b7..9f5475bd 100644 --- a/test/backend.test.js +++ b/test/backend.test.js @@ -504,4 +504,15 @@ test("GDoc Backend", function() { $.getJSON.restore(); }); +test("GDoc Backend.getUrl", function() { + var key = 'Abc_dajkdkjdafkj'; + var dataset = new recline.Model.Dataset({ + url: 'https://docs.google.com/spreadsheet/ccc?key=' + key + '#gid=0' + }); + var backend = recline.Model.backends['gdocs']; + var out = backend.getUrl(dataset); + var exp = 'https://spreadsheets.google.com/feeds/list/' + key + '/1/public/values?alt=json' + equal(exp, out); +}); + })(this.jQuery);