Skip to content

Commit e79bf33

Browse files
committed
revise and add editing; using a new npm pkg, still WIP, needs cleanup and docs
1 parent 79657ef commit e79bf33

File tree

3 files changed

+87
-14
lines changed

3 files changed

+87
-14
lines changed

google-spreadsheets.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
GoogleClientLogin = Npm.require("googleclientlogin").GoogleClientLogin;
2-
GoogleSpreadsheets = Npm.require("google-spreadsheets");
2+
GoogleSpreadsheets = Npm.require("google-spreadsheets");
3+
EditGoogleSpreadsheet = Npm.require("edit-google-spreadsheet");

package.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ Package.describe({
66

77
Npm.depends({
88
"google-spreadsheets": "0.3.0",
9-
"googleclientlogin": "0.2.8"
9+
"googleclientlogin": "0.2.8",
10+
"edit-google-spreadsheet": "0.2.6"
1011
});
1112

1213
Package.on_use(function (api) {

server/methods.js

+83-12
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,99 @@
1+
var path = Npm.require('path');
2+
var Future = Npm.require(path.join('fibers', 'future'));
3+
var fs = Npm.require('fs');
4+
var pemFile;
5+
if (__meteor_bootstrap__ && __meteor_bootstrap__.serverDir) {
6+
pemFile = path.join(__meteor_bootstrap__.serverDir, 'assets/app/google-key.pem');
7+
}
8+
19
Meteor.methods({
210
// Fetches from a google spreadsheet
311
// key = key from googe spreadsheet publish
4-
// worksheet = numerical index or string
12+
// worksheet = 0-based index of worksheet
513
// range = "R1C1:R5C5"
6-
'spreadsheet/fetch': function (key, worksheet, range, rowOneHeader) {
14+
// headerRow = 1-based index of row containing header, if there is a header
15+
'spreadsheet/fetch': function (key, worksheet, range, headerRow) {
716
if (!worksheet) worksheet = 0;
8-
if (!rowOneHeader) rowOneHeader = true;
9-
return GoogleSpreadsheets({
17+
var fut = new Future(); //don't return until we're done importing
18+
GoogleSpreadsheets({
1019
key: key
11-
}, Meteor.bindEnvironment( function(err, spreadsheet) {
20+
}, Meteor.bindEnvironment( function(error, spreadsheet) {
21+
if (error) {
22+
console.log("Error getting Google sheet with key " + key + ":", error);
23+
fut.return(false);
24+
return;
25+
}
1226
spreadsheet.worksheets[worksheet].cells({
1327
range: range
1428
}, Meteor.bindEnvironment( function(err, cells) {
29+
var header, data;
1530
//console.log("Upserting spreadsheet: ",spreadsheet.title)
16-
header = cells.cells[1];
17-
if (rowOneHeader == true) delete cells.cells[1];
31+
if (headerRow) {
32+
header = cells.cells[headerRow];
33+
delete cells.cells[headerRow];
34+
}
1835
data = cells.cells;
19-
record = GASpreadsheet.upsert({spreadsheet: spreadsheet.title},{$set:{spreadsheet: spreadsheet.title, header: header, cells: data}})
36+
var result = GASpreadsheet.upsert({spreadsheet: spreadsheet.title}, {$set:{header: header, cells: data}});
37+
fut.return(GASpreadsheet.findOne({spreadsheet: spreadsheet.title}, {fields: {_id: 1}})._id);
2038
}));
2139
}));
40+
return fut.wait();
2241
},
23-
'spreadsheet/update': function (key, worksheet, rowOneHeader) {
24-
if (!worksheet) worksheet = 0;
25-
if (!rowOneHeader) rowOneHeader = true;
26-
//TODO update spreadsheet with collection updates
42+
'spreadsheet/fetch2': function (spreadsheetName, worksheetId, options) {
43+
var fut = new Future(); //don't return until we're done exporting
44+
45+
EditGoogleSpreadsheet.load({
46+
//debug: true,
47+
spreadsheetName: spreadsheetName,
48+
worksheetId: worksheetId,
49+
oauth : {
50+
email: options.email,
51+
keyFile: pemFile
52+
}
53+
}, function sheetReady(err, spreadsheet) {
54+
if (err) {
55+
console.log(err);
56+
fut.return(false);
57+
return;
58+
}
59+
spreadsheet.receive(function(err, rows, info) {
60+
if (err) {
61+
console.log(err);
62+
fut.return(false);
63+
} else {
64+
fut.return({rows: rows, info: info});
65+
}
66+
});
67+
});
68+
return fut.wait();
69+
},
70+
'spreadsheet/update': function (spreadsheetName, worksheetId, updateObject, options) {
71+
var fut = new Future(); //don't return until we're done exporting
72+
73+
EditGoogleSpreadsheet.load({
74+
//debug: true,
75+
spreadsheetName: spreadsheetName,
76+
worksheetId: worksheetId,
77+
oauth : {
78+
email: options.email,
79+
keyFile: pemFile
80+
}
81+
}, function sheetReady(err, spreadsheet) {
82+
if (err) {
83+
console.log(err);
84+
fut.return(false);
85+
return;
86+
}
87+
spreadsheet.add(updateObject);
88+
spreadsheet.send(function(err) {
89+
if (err) {
90+
console.log(err);
91+
fut.return(false);
92+
} else {
93+
fut.return(true);
94+
}
95+
});
96+
});
97+
return fut.wait();
2798
}
2899
});

0 commit comments

Comments
 (0)