google-spreadsheet-ruby 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/google_spreadsheet.rb +81 -20
- metadata +4 -4
data/lib/google_spreadsheet.rb
CHANGED
@@ -360,6 +360,8 @@ module GoogleSpreadsheet
|
|
360
360
|
class Spreadsheet
|
361
361
|
|
362
362
|
include(Util)
|
363
|
+
|
364
|
+
SUPPORTED_EXPORT_FORMAT = Set.new(["xls", "csv", "pdf", "ods", "tsv", "html"])
|
363
365
|
|
364
366
|
def initialize(session, worksheets_feed_url, title = nil) #:nodoc:
|
365
367
|
@session = session
|
@@ -399,7 +401,8 @@ module GoogleSpreadsheet
|
|
399
401
|
#
|
400
402
|
# e.g. "http://spreadsheets.google.com/ccc?key=pz7XtlQC-PYx-jrVMJErTcg"
|
401
403
|
def human_url
|
402
|
-
|
404
|
+
# Uses Document feed because Spreadsheet feed returns wrong URL for Apps account.
|
405
|
+
return self.document_feed_entry.css("link[@rel='alternate']").first["href"]
|
403
406
|
end
|
404
407
|
|
405
408
|
# DEPRECATED: Table and Record feeds are deprecated and they will not be available after
|
@@ -407,6 +410,9 @@ module GoogleSpreadsheet
|
|
407
410
|
#
|
408
411
|
# Tables feed URL of the spreadsheet.
|
409
412
|
def tables_feed_url
|
413
|
+
warn(
|
414
|
+
"DEPRECATED: Google Spreadsheet Table and Record feeds are deprecated and they will " +
|
415
|
+
"not be available after March 2012.")
|
410
416
|
return "https://spreadsheets.google.com/feeds/#{self.key}/tables"
|
411
417
|
end
|
412
418
|
|
@@ -420,28 +426,40 @@ module GoogleSpreadsheet
|
|
420
426
|
# Set params[:reload] to true to force reloading the feed.
|
421
427
|
def spreadsheet_feed_entry(params = {})
|
422
428
|
if !@spreadsheet_feed_entry || params[:reload]
|
423
|
-
@spreadsheet_feed_entry =
|
429
|
+
@spreadsheet_feed_entry =
|
430
|
+
@session.request(:get, self.spreadsheet_feed_url).css("entry").first
|
424
431
|
end
|
425
432
|
return @spreadsheet_feed_entry
|
426
433
|
end
|
427
434
|
|
428
|
-
#
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
435
|
+
# <entry> element of document list feed as Nokogiri::XML::Element.
|
436
|
+
#
|
437
|
+
# Set params[:reload] to true to force reloading the feed.
|
438
|
+
def document_feed_entry(params = {})
|
439
|
+
if !@document_feed_entry || params[:reload]
|
440
|
+
@document_feed_entry =
|
441
|
+
@session.request(:get, self.document_feed_url, :auth => :writely).css("entry").first
|
442
|
+
end
|
443
|
+
return @document_feed_entry
|
444
|
+
end
|
445
|
+
|
446
|
+
# Creates copy of this spreadsheet with the given title.
|
447
|
+
def duplicate(new_title = nil)
|
448
|
+
new_title ||= (self.title ? "Copy of " + self.title : "Untitled")
|
449
|
+
post_url = "https://docs.google.com/feeds/default/private/full/"
|
450
|
+
header = {"GData-Version" => "3.0", "Content-Type" => "application/atom+xml"}
|
451
|
+
xml = <<-"EOS"
|
452
|
+
<entry xmlns='http://www.w3.org/2005/Atom'>
|
453
|
+
<id>#{h(self.document_feed_url)}</id>
|
454
|
+
<title>#{h(new_title)}</title>
|
455
|
+
</entry>
|
456
|
+
EOS
|
457
|
+
doc = @session.request(:post, post_url, :data => xml, :header => header, :auth => :writely)
|
440
458
|
ss_url = doc.css(
|
441
|
-
|
442
|
-
return Spreadsheet.new(@session, ss_url,
|
459
|
+
"link[@rel='http://schemas.google.com/spreadsheets/2006#worksheetsfeed']").first["href"]
|
460
|
+
return Spreadsheet.new(@session, ss_url, new_title)
|
443
461
|
end
|
444
|
-
|
462
|
+
|
445
463
|
# If +permanent+ is +false+, moves the spreadsheet to the trash.
|
446
464
|
# If +permanent+ is +true+, deletes the spreadsheet permanently.
|
447
465
|
def delete(permanent = false)
|
@@ -452,7 +470,7 @@ module GoogleSpreadsheet
|
|
452
470
|
|
453
471
|
# Renames title of the spreadsheet.
|
454
472
|
def rename(title)
|
455
|
-
doc = @session.request(:get, self.document_feed_url)
|
473
|
+
doc = @session.request(:get, self.document_feed_url, :auth => :writely)
|
456
474
|
edit_url = doc.css("link[@rel='edit']").first["href"]
|
457
475
|
xml = <<-"EOS"
|
458
476
|
<atom:entry
|
@@ -465,9 +483,43 @@ module GoogleSpreadsheet
|
|
465
483
|
</atom:entry>
|
466
484
|
EOS
|
467
485
|
|
468
|
-
@session.request(:put, edit_url, :data => xml)
|
486
|
+
@session.request(:put, edit_url, :data => xml, :auth => :writely)
|
469
487
|
end
|
470
|
-
|
488
|
+
|
489
|
+
alias title= rename
|
490
|
+
|
491
|
+
# Exports the spreadsheet in +format+ and returns it as String.
|
492
|
+
#
|
493
|
+
# +format+ can be either "xls", "csv", "pdf", "ods", "tsv" or "html".
|
494
|
+
# In format such as "csv", only the worksheet specified with +worksheet_index+ is exported.
|
495
|
+
def export_as_string(format, worksheet_index = nil)
|
496
|
+
gid_param = worksheet_index ? "&gid=#{worksheet_index}" : ""
|
497
|
+
url =
|
498
|
+
"https://spreadsheets.google.com/feeds/download/spreadsheets/Export" +
|
499
|
+
"?key=#{key}&exportFormat=#{format}#{gid_param}"
|
500
|
+
return @session.request(:get, url, :response_type => :raw)
|
501
|
+
end
|
502
|
+
|
503
|
+
# Exports the spreadsheet in +format+ as a local file.
|
504
|
+
#
|
505
|
+
# +format+ can be either "xls", "csv", "pdf", "ods", "tsv" or "html".
|
506
|
+
# If +format+ is nil, it is guessed from the file name.
|
507
|
+
# In format such as "csv", only the worksheet specified with +worksheet_index+ is exported.
|
508
|
+
def export_as_file(local_path, format = nil, worksheet_index = nil)
|
509
|
+
if !format
|
510
|
+
format = File.extname(local_path).gsub(/^\./, "")
|
511
|
+
if !SUPPORTED_EXPORT_FORMAT.include?(format)
|
512
|
+
raise(ArgumentError,
|
513
|
+
("Cannot guess format from the file name: %s\n" +
|
514
|
+
"Specify format argument explicitly") %
|
515
|
+
local_path)
|
516
|
+
end
|
517
|
+
end
|
518
|
+
open(local_path, "wb") do |f|
|
519
|
+
f.write(export_as_string(format, worksheet_index))
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
471
523
|
# Returns worksheets of the spreadsheet as array of GoogleSpreadsheet::Worksheet.
|
472
524
|
def worksheets
|
473
525
|
doc = @session.request(:get, @worksheets_feed_url)
|
@@ -502,6 +554,9 @@ module GoogleSpreadsheet
|
|
502
554
|
#
|
503
555
|
# Returns list of tables in the spreadsheet.
|
504
556
|
def tables
|
557
|
+
warn(
|
558
|
+
"DEPRECATED: Google Spreadsheet Table and Record feeds are deprecated and they will " +
|
559
|
+
"not be available after March 2012.")
|
505
560
|
doc = @session.request(:get, self.tables_feed_url)
|
506
561
|
return doc.css('entry').map(){ |e| Table.new(@session, e) }.freeze()
|
507
562
|
end
|
@@ -857,10 +912,16 @@ module GoogleSpreadsheet
|
|
857
912
|
return !@modified.empty?
|
858
913
|
end
|
859
914
|
|
915
|
+
# DEPRECATED: Table and Record feeds are deprecated and they will not be available after
|
916
|
+
# March 2012.
|
917
|
+
#
|
860
918
|
# Creates table for the worksheet and returns GoogleSpreadsheet::Table.
|
861
919
|
# See this document for details:
|
862
920
|
# http://code.google.com/intl/en/apis/spreadsheets/docs/3.0/developers_guide_protocol.html#TableFeeds
|
863
921
|
def add_table(table_title, summary, columns, options)
|
922
|
+
warn(
|
923
|
+
"DEPRECATED: Google Spreadsheet Table and Record feeds are deprecated and they will " +
|
924
|
+
"not be available after March 2012.")
|
864
925
|
default_options = { :header_row => 1, :num_rows => 0, :start_row => 2}
|
865
926
|
options = default_options.merge(options)
|
866
927
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-spreadsheet-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 17
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 5
|
10
|
+
version: 0.1.5
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Hiroshi Ichikawa
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-14 00:00:00 +09:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|