gimite-google-spreadsheet-ruby 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/google_spreadsheet.rb +42 -16
- metadata +2 -2
data/lib/google_spreadsheet.rb
CHANGED
@@ -53,7 +53,11 @@ module GoogleSpreadsheet
|
|
53
53
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
54
54
|
http.start() do
|
55
55
|
path = uri.path + (uri.query ? "?#{uri.query}" : "")
|
56
|
-
|
56
|
+
if method == :delete
|
57
|
+
response = http.__send__(method, path, header)
|
58
|
+
else
|
59
|
+
response = http.__send__(method, path, data, header)
|
60
|
+
end
|
57
61
|
if !(response.code =~ /^2/)
|
58
62
|
raise(GoogleSpreadsheet::Error, "Response code #{response.code} for POST #{url}: " +
|
59
63
|
CGI.unescapeHTML(response.body))
|
@@ -164,6 +168,12 @@ module GoogleSpreadsheet
|
|
164
168
|
return Hpricot.XML(response)
|
165
169
|
end
|
166
170
|
|
171
|
+
def delete(url) #:nodoc:
|
172
|
+
header = self.http_header.merge({"Content-Type" => "application/atom+xml"})
|
173
|
+
response = http_request(:delete, url, nil, header)
|
174
|
+
return Hpricot.XML(response)
|
175
|
+
end
|
176
|
+
|
167
177
|
def http_header #:nodoc:
|
168
178
|
return {"Authorization" => "GoogleLogin auth=#{@auth_token}"}
|
169
179
|
end
|
@@ -256,6 +266,7 @@ module GoogleSpreadsheet
|
|
256
266
|
result = []
|
257
267
|
for entry in doc.search("entry")
|
258
268
|
title = entry.search("title").text
|
269
|
+
|
259
270
|
url = entry.search(
|
260
271
|
"link[@rel='http://schemas.google.com/spreadsheets/2006#cellsfeed']")[0]["href"]
|
261
272
|
result.push(Worksheet.new(@session, url, title))
|
@@ -291,14 +302,28 @@ module GoogleSpreadsheet
|
|
291
302
|
@session = session
|
292
303
|
@cells_feed_url = cells_feed_url
|
293
304
|
@title = title
|
305
|
+
|
294
306
|
@cells = nil
|
295
307
|
@input_values = nil
|
296
308
|
@modified = Set.new()
|
297
309
|
end
|
298
310
|
|
299
|
-
# URL of cell-based feed of the
|
311
|
+
# URL of cell-based feed of the worksheet.
|
300
312
|
attr_reader(:cells_feed_url)
|
301
313
|
|
314
|
+
# URL of worksheet feed URL of the worksheet.
|
315
|
+
def worksheet_feed_url
|
316
|
+
# I don't know good way to get worksheet feed URL from cells feed URL.
|
317
|
+
# Probably it would be cleaner to keep worksheet feed URL and get cells feed URL
|
318
|
+
# from it.
|
319
|
+
if !(@cells_feed_url =~
|
320
|
+
%r{^http://spreadsheets.google.com/feeds/cells/(.*)/(.*)/private/full$})
|
321
|
+
raise(GoogleSpreadsheet::Error,
|
322
|
+
"cells feed URL is in unknown format: #{@cells_feed_url}")
|
323
|
+
end
|
324
|
+
return "http://spreadsheets.google.com/feeds/worksheets/#{$1}/private/full/#{$2}"
|
325
|
+
end
|
326
|
+
|
302
327
|
# Returns content of the cell as String. Top-left cell is [1, 1].
|
303
328
|
def [](row, col)
|
304
329
|
return self.cells[[row, col]] || ""
|
@@ -403,6 +428,7 @@ module GoogleSpreadsheet
|
|
403
428
|
@max_rows = doc.search("gs:rowCount").text.to_i()
|
404
429
|
@max_cols = doc.search("gs:colCount").text.to_i()
|
405
430
|
@title = doc.search("title").text
|
431
|
+
|
406
432
|
@cells = {}
|
407
433
|
@input_values = {}
|
408
434
|
for entry in doc.search("entry")
|
@@ -417,31 +443,23 @@ module GoogleSpreadsheet
|
|
417
443
|
return true
|
418
444
|
end
|
419
445
|
|
420
|
-
# Saves your changes made by []
|
446
|
+
# Saves your changes made by []=, etc. to the server.
|
421
447
|
def save()
|
422
448
|
sent = false
|
423
449
|
|
424
450
|
if @meta_modified
|
425
451
|
|
426
|
-
|
427
|
-
# Probably it would be cleaner to keep worksheet feed URL and get cells feed URL
|
428
|
-
# from it.
|
429
|
-
if !(@cells_feed_url =~
|
430
|
-
%r{^http://spreadsheets.google.com/feeds/cells/(.*)/(.*)/private/full$})
|
431
|
-
raise(GoogleSpreadsheet::Error,
|
432
|
-
"cells feed URL is in unknown format: #{@cells_feed_url}")
|
433
|
-
end
|
434
|
-
ws_doc = @session.get(
|
435
|
-
"http://spreadsheets.google.com/feeds/worksheets/#{$1}/private/full/#{$2}")
|
452
|
+
ws_doc = @session.get(self.worksheet_feed_url)
|
436
453
|
edit_url = ws_doc.search("link[@rel='edit']")[0]["href"]
|
437
454
|
xml = <<-"EOS"
|
438
455
|
<entry xmlns='http://www.w3.org/2005/Atom'
|
439
456
|
xmlns:gs='http://schemas.google.com/spreadsheets/2006'>
|
440
|
-
<title>#{h(
|
441
|
-
<gs:rowCount>#{h(
|
442
|
-
<gs:colCount>#{h(
|
457
|
+
<title>#{h(self.title)}</title>
|
458
|
+
<gs:rowCount>#{h(self.max_rows)}</gs:rowCount>
|
459
|
+
<gs:colCount>#{h(self.max_cols)}</gs:colCount>
|
443
460
|
</entry>
|
444
461
|
EOS
|
462
|
+
|
445
463
|
@session.put(edit_url, xml)
|
446
464
|
|
447
465
|
@meta_modified = false
|
@@ -491,6 +509,7 @@ module GoogleSpreadsheet
|
|
491
509
|
xml << <<-"EOS"
|
492
510
|
</feed>
|
493
511
|
EOS
|
512
|
+
|
494
513
|
result = @session.post("#{@cells_feed_url}/batch", xml)
|
495
514
|
for entry in result.search("atom:entry")
|
496
515
|
interrupted = entry.search("batch:interrupted")[0]
|
@@ -517,6 +536,13 @@ module GoogleSpreadsheet
|
|
517
536
|
reload()
|
518
537
|
end
|
519
538
|
|
539
|
+
# Deletes this worksheet. Deletion takes effect right away without calling save().
|
540
|
+
def delete
|
541
|
+
ws_doc = @session.get(self.worksheet_feed_url)
|
542
|
+
edit_url = ws_doc.search("link[@rel='edit']")[0]["href"]
|
543
|
+
@session.delete(edit_url)
|
544
|
+
end
|
545
|
+
|
520
546
|
# Returns true if you have changes made by []= which haven't been saved.
|
521
547
|
def dirty?
|
522
548
|
return !@modified.empty?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gimite-google-spreadsheet-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hiroshi Ichikawa
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-09-05 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|