[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!
This commit is contained in:
Rufus Pollock 2012-03-15 00:24:21 +00:00
parent 5660c88020
commit dd4fbeceb5
2 changed files with 32 additions and 1 deletions

View File

@ -17,13 +17,33 @@ this.recline.Backend = this.recline.Backend || {};
// );
// </pre>
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};

View File

@ -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);