googletastic 0.0.5 → 0.0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +5 -1
- data/lib/googletastic.rb +1 -1
- data/lib/googletastic/base.rb +1 -1
- data/lib/googletastic/document.rb +11 -10
- data/lib/googletastic/row.rb +2 -2
- data/lib/googletastic/spreadsheet.rb +6 -0
- data/lib/googletastic/worksheet.rb +5 -1
- data/spec/googletastic/document_spec.rb +2 -3
- data/spec/googletastic/spreadsheet_spec.rb +6 -2
- metadata +2 -1
data/Rakefile
CHANGED
@@ -68,7 +68,7 @@ end
|
|
68
68
|
|
69
69
|
desc "Install the gem locally"
|
70
70
|
task :install => [:package] do
|
71
|
-
sh %{
|
71
|
+
sh %{gem install pkg/#{spec.name}-#{spec.version} --no-ri --no-rdoc}
|
72
72
|
end
|
73
73
|
|
74
74
|
desc "Publish gem to rubygems"
|
@@ -102,4 +102,8 @@ task :default => :spec
|
|
102
102
|
desc "Run Googletastic Benchmarks"
|
103
103
|
task :benchmark do
|
104
104
|
files("spec/benchmarks/*") {|file| system("ruby #{file}") }
|
105
|
+
end
|
106
|
+
|
107
|
+
task :yank do
|
108
|
+
`gem yank #{spec.name} -v #{spec.version}`
|
105
109
|
end
|
data/lib/googletastic.rb
CHANGED
data/lib/googletastic/base.rb
CHANGED
@@ -11,7 +11,7 @@ class Googletastic::Base < Hash
|
|
11
11
|
# They don't include the url for finding the document,
|
12
12
|
# which can be inferred from the "action" you're taking on it,
|
13
13
|
# and the general api.
|
14
|
-
attr_accessor :id
|
14
|
+
attr_accessor :id, :etag
|
15
15
|
attr_accessor :acl
|
16
16
|
attr_accessor :created_at, :updated_at
|
17
17
|
attr_accessor :attachment_path # for docs, images...
|
@@ -25,7 +25,7 @@ class Googletastic::Document < Googletastic::Base
|
|
25
25
|
PPT = "application/vnd.ms-powerpoint" unless defined?(PPT)
|
26
26
|
PPS = "application/vnd.ms-powerpoint" unless defined?(PPS)
|
27
27
|
|
28
|
-
attr_accessor :title, :kind, :categories, :
|
28
|
+
attr_accessor :title, :kind, :categories, :plain_id, :ext
|
29
29
|
|
30
30
|
def has_access?(email)
|
31
31
|
self.class.first(:url => update_url)
|
@@ -112,12 +112,12 @@ class Googletastic::Document < Googletastic::Base
|
|
112
112
|
end
|
113
113
|
|
114
114
|
# docid (all lowercase)
|
115
|
-
def
|
115
|
+
def get_url(id)
|
116
116
|
"http://docs.google.com/View?docID=#{id}&revision=_latest"
|
117
117
|
end
|
118
118
|
|
119
|
-
def
|
120
|
-
"https://docs.google.com/feeds/
|
119
|
+
def show_url(id)
|
120
|
+
"https://docs.google.com/feeds/documents/private/full/#{id}"
|
121
121
|
end
|
122
122
|
|
123
123
|
def edit_url(id)
|
@@ -163,13 +163,13 @@ class Googletastic::Document < Googletastic::Base
|
|
163
163
|
def build_url(options)
|
164
164
|
base = options.has_key?(:url) ? options[:url] : self.index_url
|
165
165
|
base.gsub!(/full$/, "expandAcl") if options.has_key?(:include) and options[:include].index(:acl)
|
166
|
-
base << "/#{options[:id]}" if options.has_key?(:id)
|
167
166
|
options[:url] = base
|
168
167
|
super(options)
|
169
168
|
end
|
170
169
|
|
171
170
|
def unmarshall(xml)
|
172
171
|
records = xml.xpath("//atom:entry", ns_tag("atom")).collect do |record|
|
172
|
+
etag = record["etag"].to_s
|
173
173
|
kind = title = id = categories = value = nil # reset
|
174
174
|
title = record.xpath("atom:title", ns_tag("atom")).text
|
175
175
|
categories = record.xpath("atom:category", ns_tag("atom")).collect do |category|
|
@@ -177,17 +177,18 @@ class Googletastic::Document < Googletastic::Base
|
|
177
177
|
kind = value if !kind and valid_kind?(value)
|
178
178
|
value
|
179
179
|
end
|
180
|
-
|
181
|
-
|
180
|
+
id = record.xpath("gd:resourceId", ns_tag("gd")).text
|
181
|
+
plain_id = id.gsub(/#{kind}:/, "")
|
182
182
|
created_at = record.xpath("atom:published", ns_tag("atom")).text
|
183
183
|
updated_at = record.xpath("atom:updated", ns_tag("atom")).text
|
184
|
-
|
184
|
+
|
185
185
|
Googletastic::Document.new(
|
186
186
|
:id => id,
|
187
187
|
:title => title,
|
188
188
|
:categories => categories,
|
189
|
+
:etag => etag,
|
189
190
|
:kind => kind,
|
190
|
-
:
|
191
|
+
:plain_id => plain_id,
|
191
192
|
:ext => File.extname(title),
|
192
193
|
:created_at => DateTime.parse(created_at),
|
193
194
|
:updated_at => DateTime.parse(updated_at)
|
@@ -201,7 +202,7 @@ class Googletastic::Document < Googletastic::Base
|
|
201
202
|
xml.entry(ns_xml("atom", "exif", "openSearch")) {
|
202
203
|
if record.id
|
203
204
|
xml.id_ {
|
204
|
-
xml.text get_url(record.
|
205
|
+
xml.text get_url(record.id)
|
205
206
|
}
|
206
207
|
end
|
207
208
|
record.categories.each do |category|
|
data/lib/googletastic/row.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Googletastic::Row < Googletastic::Base
|
2
2
|
|
3
|
-
attr_accessor :data, :worksheet_id, :spreadsheet_id, :title
|
3
|
+
attr_accessor :data, :worksheet_id, :spreadsheet_id, :title
|
4
4
|
|
5
5
|
def get_url
|
6
6
|
self.class.get_url(File.join(self.spreadsheet_id, self.worksheet_id), self.id)
|
@@ -41,7 +41,7 @@ class Googletastic::Row < Googletastic::Base
|
|
41
41
|
|
42
42
|
def unmarshall(xml)
|
43
43
|
records = xml.xpath("//atom:entry", ns_tag("atom")).collect do |record|
|
44
|
-
etag = record["etag"]
|
44
|
+
etag = record["etag"].to_s
|
45
45
|
id = record.xpath("atom:id", ns_tag("atom")).first.text
|
46
46
|
ids = id =~ /http:\/\/spreadsheets\.google\.com\/feeds\/list\/([^\/]+)\/([^\/]+)\/([^\/]+)/
|
47
47
|
spreadsheet_id = $1
|
@@ -14,6 +14,10 @@ class Googletastic::Spreadsheet < Googletastic::Base
|
|
14
14
|
@table ||= Googletastic::Table.first(:key => self.id)
|
15
15
|
end
|
16
16
|
|
17
|
+
def num_rows
|
18
|
+
worksheet.num_rows
|
19
|
+
end
|
20
|
+
|
17
21
|
def rows
|
18
22
|
@rows ||= Googletastic::Row.all(:key => self.id, :worksheet_id => worksheet.id)
|
19
23
|
end
|
@@ -49,6 +53,7 @@ class Googletastic::Spreadsheet < Googletastic::Base
|
|
49
53
|
|
50
54
|
def unmarshall(xml)
|
51
55
|
records = xml.xpath("//atom:entry", ns_tag("atom")).collect do |record|
|
56
|
+
etag = record["etag"].to_s
|
52
57
|
id = record.xpath("atom:id", ns_tag("atom")).first.text.gsub("http://spreadsheets.google.com/feeds/spreadsheets/", "")
|
53
58
|
edit_id = record.xpath("atom:link[@rel='alternate']", ns_tag("atom")).first
|
54
59
|
edit_id = edit_id["href"].gsub("http://spreadsheets.google.com/ccc?key=", "") if edit_id
|
@@ -59,6 +64,7 @@ class Googletastic::Spreadsheet < Googletastic::Base
|
|
59
64
|
|
60
65
|
Googletastic::Spreadsheet.new(
|
61
66
|
:id => id,
|
67
|
+
:etag => etag,
|
62
68
|
:edit_id => edit_id,
|
63
69
|
:title => title,
|
64
70
|
:content => content,
|
@@ -1,6 +1,6 @@
|
|
1
1
|
class Googletastic::Worksheet < Googletastic::Base
|
2
2
|
|
3
|
-
attr_accessor :title, :content, :spreadsheet_id
|
3
|
+
attr_accessor :title, :content, :spreadsheet_id, :num_rows, :num_columns
|
4
4
|
|
5
5
|
# Time.now.xmlschema
|
6
6
|
class << self
|
@@ -28,12 +28,16 @@ class Googletastic::Worksheet < Googletastic::Base
|
|
28
28
|
title = record.xpath("atom:title", ns_tag("atom")).first.text
|
29
29
|
content = record.xpath("atom:content", ns_tag("atom")).first.text
|
30
30
|
updated_at = record.xpath("atom:updated", ns_tag("atom")).text
|
31
|
+
num_rows = record.xpath("gs:rowCount", ns_tag("gs")).text.to_i
|
32
|
+
num_columns = record.xpath("gs:colCount", ns_tag("gs")).text.to_i
|
31
33
|
|
32
34
|
worksheet = Googletastic::Worksheet.new(
|
33
35
|
:id => id,
|
34
36
|
:spreadsheet_id => spreadsheet_id,
|
35
37
|
:title => title,
|
36
38
|
:content => content,
|
39
|
+
:num_rows => num_rows,
|
40
|
+
:num_columns => num_columns,
|
37
41
|
:updated_at => DateTime.parse(updated_at),
|
38
42
|
:raw => record.to_xml
|
39
43
|
)
|
@@ -5,7 +5,7 @@ describe Googletastic::Document do
|
|
5
5
|
|
6
6
|
before(:all) do
|
7
7
|
@doc = Document.new
|
8
|
-
@id = "0AT1-fvkm5vJPZGN2NzR3bmJfMGZiMnh3N2R0"
|
8
|
+
@id = "document:0AT1-fvkm5vJPZGN2NzR3bmJfMGZiMnh3N2R0"
|
9
9
|
end
|
10
10
|
|
11
11
|
# FIND METHODS
|
@@ -63,7 +63,7 @@ describe Googletastic::Document do
|
|
63
63
|
|
64
64
|
it "should have a valid 'kind'" do
|
65
65
|
@doc.kind.should_not == nil
|
66
|
-
Googletastic::Document.
|
66
|
+
Googletastic::Document.valid_kind?(@doc.kind).should == true
|
67
67
|
end
|
68
68
|
|
69
69
|
it "should have an array of categories" do
|
@@ -93,7 +93,6 @@ describe Googletastic::Document do
|
|
93
93
|
|
94
94
|
it "should marshall the document into an entry feed with at least a 'title' and 'id'" do
|
95
95
|
xml = Nokogiri::XML(@xml)
|
96
|
-
xml.xpath("//atom:id", {"atom" => NS['atom']}).first.text.should == "#{@doc.index_url.gsub('http', 'https').gsub('documents', 'default')}/#{@doc.resource_id}"
|
97
96
|
xml.xpath("//atom:title", {"atom" => NS['atom']}).first.text.should == @doc.title
|
98
97
|
end
|
99
98
|
end
|
@@ -7,11 +7,15 @@ describe Googletastic::Spreadsheet do
|
|
7
7
|
puts spreadsheet.inspect
|
8
8
|
spreadsheet.should be_an_instance_of(Googletastic::Spreadsheet)
|
9
9
|
end
|
10
|
-
=begin
|
11
10
|
it "should retrieve a list of spreadsheets" do
|
12
|
-
Googletastic::Spreadsheet.all
|
11
|
+
spreadsheets = Googletastic::Spreadsheet.all
|
12
|
+
puts spreadsheets.inspect
|
13
|
+
spreadsheets.each do |sheet|
|
14
|
+
puts sheet.num_rows.inspect
|
15
|
+
end
|
13
16
|
end
|
14
17
|
|
18
|
+
=begin
|
15
19
|
it "should retrieve a spreadsheets worksheet" do
|
16
20
|
Googletastic::Spreadsheet.first.worksheet.should_not be_nil
|
17
21
|
end
|