googletastic 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/googletastic.rb CHANGED
@@ -59,7 +59,7 @@ end
59
59
 
60
60
  module Googletastic
61
61
  # :stopdoc:
62
- VERSION = '0.0.3'
62
+ VERSION = '0.0.4'
63
63
  # :startdoc
64
64
  class << self; attr_accessor :keys, :clients, :options; end
65
65
 
@@ -18,6 +18,8 @@ class Googletastic::Base < Hash
18
18
  # classes/records it is synced with
19
19
  attr_accessor :synced_with
20
20
  attr_accessor :response
21
+ attr_accessor :keep_raw
22
+ attr_accessor :raw
21
23
 
22
24
  def synced_with
23
25
  @synced_with ||= []
@@ -47,7 +47,7 @@ class Googletastic::Document < Googletastic::Base
47
47
  end
48
48
  end
49
49
  body.xpath("//div[@id='google-view-footer']").each { |n| n.unlink }
50
- @content = body.xpath("//div[@id='doc-contents']").first
50
+ @content = body.xpath("//div[@id='doc-contents']").first.to_html
51
51
  end
52
52
 
53
53
  def acl
@@ -98,11 +98,12 @@ class Googletastic::Document < Googletastic::Base
98
98
  :language => "sourceLanguage",
99
99
  :permanent_delete => "delete",
100
100
  :convert => "convert",
101
- :format => "exportFormat"
101
+ :format => "exportFormat",
102
+ :kind => "category"
102
103
  }.merge(super)
103
104
  end
104
105
 
105
- def valid_category?(value)
106
+ def valid_kind?(value)
106
107
  %w(document spreadsheet folder presentation pdf form).include?(value)
107
108
  end
108
109
 
@@ -173,7 +174,7 @@ class Googletastic::Document < Googletastic::Base
173
174
  title = record.xpath("atom:title", ns_tag("atom")).text
174
175
  categories = record.xpath("atom:category", ns_tag("atom")).collect do |category|
175
176
  value = category["label"].to_s
176
- kind = value if !kind and valid_category?(value)
177
+ kind = value if !kind and valid_kind?(value)
177
178
  value
178
179
  end
179
180
  resource_id = record.xpath("gd:resourceId", ns_tag("gd")).text
@@ -215,5 +216,24 @@ class Googletastic::Document < Googletastic::Base
215
216
  }
216
217
  }.to_xml
217
218
  end
219
+
220
+ def get_clean_content(remote)
221
+ title = remote.title
222
+ ext = remote.ext
223
+ if ext == ".textile"
224
+ # google is putting strange characters at beginning of downloaded files
225
+ content = remote.download("txt").body.gsub(/\357\273\277/, "")
226
+ content = RedCloth.new(content).to_html
227
+ elsif ext == ".markdown"
228
+ content = remote.download("txt").body.gsub(/\357\273\277/, "")
229
+ content = BlueCloth.new(content).to_html
230
+ elsif ext.nil? || ext.empty?
231
+ # just use the html we have already
232
+ content = remote.content
233
+ else
234
+ content = remote.download("txt").body.gsub(/\357\273\277/, "")
235
+ end
236
+ content
237
+ end
218
238
  end
219
239
  end
@@ -3,7 +3,7 @@ class Googletastic::Form < Googletastic::Base
3
3
 
4
4
  FORM_KEY_EXPRESSION = /formkey["|']\s*:["|']\s*([^"|']+)"/ unless defined?(FORM_KEY_EXPRESSION)
5
5
 
6
- attr_accessor :title, :body, :redirect_to, :form_key, :form_only, :authenticity_token
6
+ attr_accessor :title, :body, :redirect_to, :form_key, :form_only, :authenticity_token, :spreadsheet
7
7
 
8
8
  def body(options = {}, &block)
9
9
  @body ||= get(options, &block)
@@ -18,8 +18,69 @@ class Googletastic::Form < Googletastic::Base
18
18
  self.class.show_url(self.form_key)
19
19
  end
20
20
 
21
+ def form_key
22
+ @form_key ||= get_form_key
23
+ end
24
+
25
+ def properties
26
+ body
27
+ @properties
28
+ end
29
+
30
+ # this you want to call JUST BEFORE you render in the view
31
+ # body still gives you the nokogiri element
32
+ def render
33
+ if self.form_only
34
+ result = body.xpath("//form").first.unlink
35
+ else
36
+ body.xpath("//div[@class='ss-footer']").first.unlink
37
+ body.xpath("//script").each {|x| x.unlink }
38
+ result = body.xpath("//div[@class='ss-form-container']").first.unlink
39
+ end
40
+ result.to_html
41
+ end
42
+
43
+ # {columen_name => value}
44
+ def set_defaults(hash)
45
+ hash.each do |column, value|
46
+ entry = properties[column]
47
+ next unless entry and !entry.empty?
48
+ nodes = body.xpath("//*[@name='#{entry}']")
49
+ if entry =~ /group/
50
+ nodes.each do |node|
51
+ if node["value"] == value
52
+ node["checked"] = "checked"
53
+ break
54
+ end
55
+ end
56
+ else
57
+ node = nodes.first
58
+ next unless node
59
+ case node.name.to_s
60
+ when "input"
61
+ node["value"] = value
62
+ when "textarea"
63
+ node.content = value
64
+ when "select"
65
+ node.xpath("option").each do |option|
66
+ if option["value"] == value
67
+ option["selected"] = "selected"
68
+ break
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+
21
76
  class << self
22
77
 
78
+ def find_one(id, options)
79
+ options[:id] = id
80
+ options[:url] = self.get_url(id)
81
+ find_by_api(options).first
82
+ end
83
+
23
84
  def client_class
24
85
  "Spreadsheets"
25
86
  end
@@ -28,6 +89,10 @@ class Googletastic::Form < Googletastic::Base
28
89
  "http://spreadsheets.google.com/feeds/spreadsheets/private/full"
29
90
  end
30
91
 
92
+ def get_url(id)
93
+ "http://spreadsheets.google.com/feeds/spreadsheets/private/full/#{id}"
94
+ end
95
+
31
96
  def submit_url(id = "")
32
97
  "http://spreadsheets.google.com/formResponse?formkey=#{id}"
33
98
  end
@@ -61,7 +126,7 @@ class Googletastic::Form < Googletastic::Base
61
126
 
62
127
  def get_form_key
63
128
  begin
64
- agent = WWW::Mechanize.new
129
+ agent = defined?(Mechanize) ? Mechanize.new : WWW::Mechanize.new
65
130
  # google wants recent browsers!
66
131
  # http://docs.google.com/support/bin/answer.py?answer=37560&hl=en
67
132
  agent.user_agent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; ru-ru) AppleWebKit/533.2+ (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10"
@@ -119,17 +184,25 @@ class Googletastic::Form < Googletastic::Base
119
184
  node.add_child Nokogiri::XML::Text.new("\n", html)
120
185
  end
121
186
 
122
- if self.form_only
123
- html.xpath("//form").first.unlink
124
- else
125
- html.xpath("//div[@class='ss-footer']").first.unlink
126
- html.xpath("//script").each {|x| x.unlink }
127
- html.xpath("//div[@class='ss-form-container']").first.unlink
187
+ @properties = {}
188
+ html.css("div.ss-item").each do |item|
189
+ entry = item.xpath("div[@class='ss-form-entry']").first
190
+ label = entry.xpath("label[@class='ss-q-title']").first
191
+ next unless label
192
+ single = (item["class"].to_s =~ /ss-(grid|scale)/).nil?
193
+ type = single ? "single" : "group"
194
+ column = label.text.downcase.gsub(/[^a-z0-9\-]/, "")
195
+ input_name = label["for"].gsub("_", ".").squeeze("\.") + "." + type
196
+ @properties[column] = input_name
128
197
  end
198
+
199
+ html
129
200
  end
130
201
 
131
202
  def add_redirect(doc, options, &block)
132
- action = doc.xpath("//form").first["action"].to_s
203
+ action = doc.xpath("//form").first
204
+ return if action.nil?
205
+ action = action["action"].to_s
133
206
  submit_key = action.gsub(self.submit_url, "")
134
207
 
135
208
  form = doc.xpath("//form").first
@@ -63,9 +63,7 @@ module Googletastic::Mixins::Actions
63
63
  end
64
64
 
65
65
  def upload_url
66
- puts "UPLOADURL"
67
66
  self.class.upload_url(self.id)
68
- puts "POST"
69
67
  end
70
68
 
71
69
  def save
@@ -95,17 +93,20 @@ module Googletastic::Mixins::Actions
95
93
 
96
94
  def create
97
95
  if has_attachment?
98
- self.class.client.post_file(self.class.index_url, self.attachment_path, mime_type, self.to_xml)
96
+ self.class.client.post_file(self.index_url, self.attachment_path, mime_type, self.to_xml)
99
97
  else
100
- self.class.client.post(self.class.index_url, self.to_xml)
98
+ self.class.client.post(self.index_url, self.to_xml)
101
99
  end
102
100
  end
103
-
101
+
104
102
  def update(attribute_names = @attributes.keys)
105
103
  if has_attachment?
106
- self.class.client.put_file(self.class.index_url, self.attachment_path, mime_type, self.to_xml)
104
+ self.class.client.put_file(self.index_url, self.attachment_path, mime_type, self.to_xml)
107
105
  else
108
- self.class.client.put(self.edit_url || self.class.index_url, self.to_xml)
106
+ original_headers = self.client.headers.dup
107
+ self.client.headers["If-Match"] = self.etag if self.respond_to?(:etag)
108
+ self.class.client.put(self.edit_url || self.index_url, self.to_xml)
109
+ self.client.headers = original_headers
109
110
  end
110
111
  end
111
112
  end
@@ -21,7 +21,7 @@ module Googletastic::Mixins::Attributes
21
21
 
22
22
  def inspect
23
23
  hash = ""
24
- attributes.each { |k,v| hash << " @#{k.to_s}=#{v.inspect}" }
24
+ attributes.each { |k,v| hash << " @#{k.to_s}=#{v.inspect}" unless k.to_s == "raw" }
25
25
  "#<#{self.class.to_s}#{hash}/>"
26
26
  end
27
27
  end
@@ -59,6 +59,7 @@ module Googletastic::Mixins::Finders
59
59
 
60
60
  def find_one(id, options)
61
61
  options[:id] = id
62
+ options[:url] = self.show_url(id)
62
63
  find_by_api(options).first
63
64
  end
64
65
 
@@ -12,7 +12,9 @@ module Googletastic::Mixins::Namespaces
12
12
  "app" => "http://www.w3.org/2007/app",
13
13
  "gCal" => "http://schemas.google.com/gCal/2005",
14
14
  "gContact" => "http://schemas.google.com/contact/2008",
15
- "batch" => "http://schemas.google.com/gdata/batch"
15
+ "batch" => "http://schemas.google.com/gdata/batch",
16
+ "gs" => "http://schemas.google.com/spreadsheets/2006",
17
+ "gsx" => "http://schemas.google.com/spreadsheets/2006/extended"
16
18
  } unless defined?(NAMESPACES)
17
19
 
18
20
  def self.included(base)
@@ -50,7 +50,7 @@ module Googletastic::Mixins::Requesting
50
50
  options.inject({}) do |converted, (key, value)|
51
51
  real_key = queries[key]
52
52
  if queries.has_key?(key)
53
- next if self.respond_to?("valid_#{real_key}?") and !self["valid_#{real_key}?"]
53
+ next if self.respond_to?("valid_#{real_key}?") and !self.send("valid_#{real_key}?", value)
54
54
  value = self.send("convert_#{real_key}", value) if self.respond_to?("convert_#{real_key}")
55
55
  converted[real_key] = value
56
56
  end
@@ -0,0 +1,108 @@
1
+ class Googletastic::Row < Googletastic::Base
2
+
3
+ attr_accessor :data, :worksheet_id, :spreadsheet_id, :title, :etag
4
+
5
+ def get_url
6
+ self.class.get_url(File.join(self.spreadsheet_id, self.worksheet_id), self.id)
7
+ end
8
+
9
+ def index_url
10
+ "http://spreadsheets.google.com/feeds/list/#{self.spreadsheet_id}/#{self.worksheet_id}/private/full"
11
+ end
12
+
13
+ def edit_url
14
+ "http://spreadsheets.google.com/feeds/list/#{self.spreadsheet_id}/#{self.worksheet_id}/private/full/#{self.id}"
15
+ end
16
+
17
+ # Time.now.xmlschema
18
+ class << self
19
+
20
+ def client_class
21
+ "Spreadsheets"
22
+ end
23
+
24
+ def index_url(path)
25
+ "http://spreadsheets.google.com/feeds/list/#{path}/private/full"
26
+ end
27
+
28
+ def show_url(path, id)
29
+ "http://spreadsheets.google.com/feeds/list/#{path}/private/full/#{id}"
30
+ end
31
+
32
+ def get_url(path, id)
33
+ "http://spreadsheets.google.com/feeds/list/#{path}/private/full/#{id}"
34
+ end
35
+
36
+ def build_url(options)
37
+ raise "You must specify a spreadsheet key 'key' and a 'worksheet_id' for a list of rows" unless (options[:key] and options[:worksheet_id])
38
+ options[:url] ||= index_url(File.join(options[:key], options[:worksheet_id]))
39
+ super(options)
40
+ end
41
+
42
+ def unmarshall(xml)
43
+ records = xml.xpath("//atom:entry", ns_tag("atom")).collect do |record|
44
+ etag = record["etag"]
45
+ id = record.xpath("atom:id", ns_tag("atom")).first.text
46
+ ids = id =~ /http:\/\/spreadsheets\.google\.com\/feeds\/list\/([^\/]+)\/([^\/]+)\/([^\/]+)/
47
+ spreadsheet_id = $1
48
+ worksheet_id = $2
49
+ id = $3
50
+ title = record.xpath("atom:title", ns_tag("atom")).first.text
51
+ content = record.xpath("atom:content", ns_tag("atom")).first.text
52
+ created_at = record.xpath("atom:published", ns_tag("atom")).text
53
+ updated_at = record.xpath("atom:updated", ns_tag("atom")).text
54
+ data = {}
55
+
56
+ record.xpath("gsx:*", ns_tag('gsx')).each do |node|
57
+ next unless node.elem?
58
+ data[node.name] = node.text
59
+ end
60
+
61
+ Googletastic::Row.new(
62
+ :id => id,
63
+ :etag => etag,
64
+ :title => title,
65
+ :spreadsheet_id => spreadsheet_id,
66
+ :worksheet_id => worksheet_id,
67
+ :data => data,
68
+ :updated_at => DateTime.parse(updated_at),
69
+ :raw => record.to_xml
70
+ )
71
+ end
72
+ records
73
+ end
74
+
75
+ # for save and update
76
+ def marshall(record)
77
+ Nokogiri::XML::Builder.new { |xml|
78
+ attributes = nil
79
+ if record.id
80
+ attributes = {"etag" => record.etag}.merge(ns_xml("atom", "gsx"))
81
+ else
82
+ attributes = ns_xml("atom", "gsx")
83
+ end
84
+ xml.entry(attributes) {
85
+ if record.id # PUT = update
86
+ xml.id_ {
87
+ xml.text record.get_url
88
+ }
89
+ #xml.updated {
90
+ # xml.text record.updated.to_s
91
+ #}
92
+ end
93
+ if record.title
94
+ xml.title(:type => "text") {
95
+ xml.text record.title
96
+ }
97
+ end
98
+ record.data.each do |k,v|
99
+ xml["gsx"].send(k) {
100
+ xml.text v
101
+ }
102
+ end
103
+ }
104
+ }.to_xml
105
+ end
106
+
107
+ end
108
+ end
@@ -1,6 +1,32 @@
1
1
  class Googletastic::Spreadsheet < Googletastic::Base
2
2
 
3
- attr_accessor :title, :content
3
+ attr_accessor :title, :content, :edit_id
4
+
5
+ def worksheet_url
6
+ self.class.worksheet_url(self.id)
7
+ end
8
+
9
+ def worksheet
10
+ @worksheet ||= Googletastic::Worksheet.first(:key => self.id)
11
+ end
12
+
13
+ def table
14
+ @table ||= Googletastic::Table.first(:key => self.id)
15
+ end
16
+
17
+ def rows
18
+ @rows ||= Googletastic::Row.all(:key => self.id, :worksheet_id => worksheet.id)
19
+ end
20
+
21
+ def form
22
+ @form ||= Googletastic::Form.find(self.id)
23
+ end
24
+
25
+ def columns
26
+ return @columns if @columns
27
+ row = @rows ? @rows.first : Googletastic::Row.first(:key => self.id, :worksheet_id => worksheet.id)
28
+ @columns = row.data.keys
29
+ end
4
30
 
5
31
  # Time.now.xmlschema
6
32
  class << self
@@ -12,24 +38,32 @@ class Googletastic::Spreadsheet < Googletastic::Base
12
38
  def index_url
13
39
  "http://spreadsheets.google.com/feeds/spreadsheets/private/full"
14
40
  end
41
+
42
+ def show_url(id)
43
+ "http://spreadsheets.google.com/feeds/spreadsheets/private/full/#{id}"
44
+ end
45
+
46
+ def worksheet_url(id)
47
+ "http://spreadsheets.google.com/feeds/worksheets/#{id}/private/full"
48
+ end
15
49
 
16
50
  def unmarshall(xml)
17
51
  records = xml.xpath("//atom:entry", ns_tag("atom")).collect do |record|
18
- #id = record.xpath("atom:id", ns_tag("atom")).first.text.gsub("http://spreadsheets.google.com/feeds/spreadsheets/", "")
19
- id = record.xpath("atom:link[@rel='alternate']", ns_tag("atom")).first
20
- if id
21
- id = id["href"].gsub("http://spreadsheets.google.com/ccc?key=", "")
22
- end
23
- title = record.xpath("atom:title", ns_tag("atom")).first.text
24
- content = record.xpath("atom:content", ns_tag("atom")).first.text
25
- created_at = record.xpath("atom:published", ns_tag("atom")).text
26
- updated_at = record.xpath("atom:updated", ns_tag("atom")).text
52
+ id = record.xpath("atom:id", ns_tag("atom")).first.text.gsub("http://spreadsheets.google.com/feeds/spreadsheets/", "")
53
+ edit_id = record.xpath("atom:link[@rel='alternate']", ns_tag("atom")).first
54
+ edit_id = edit_id["href"].gsub("http://spreadsheets.google.com/ccc?key=", "") if edit_id
55
+ title = record.xpath("atom:title", ns_tag("atom")).first.text
56
+ content = record.xpath("atom:content", ns_tag("atom")).first.text
57
+ created_at = record.xpath("atom:published", ns_tag("atom")).text
58
+ updated_at = record.xpath("atom:updated", ns_tag("atom")).text
27
59
 
28
60
  Googletastic::Spreadsheet.new(
29
61
  :id => id,
62
+ :edit_id => edit_id,
30
63
  :title => title,
31
64
  :content => content,
32
- :updated_at => DateTime.parse(updated_at)
65
+ :updated_at => DateTime.parse(updated_at),
66
+ :raw => record.to_xml
33
67
  )
34
68
  end
35
69
  records
@@ -0,0 +1,59 @@
1
+ class Googletastic::Table < Googletastic::Base
2
+
3
+ attr_accessor :title, :content, :summary, :columns, :spreadsheet_id, :num_rows, :start_row
4
+
5
+ # Time.now.xmlschema
6
+ class << self
7
+
8
+ def client_class
9
+ "Spreadsheets"
10
+ end
11
+
12
+ def show_url(id)
13
+ "http://spreadsheets.google.com/feeds/#{id}/tables"
14
+ end
15
+
16
+ def build_url(options)
17
+ raise "You must specify an spreadsheet key 'key' for a table" unless options[:key]
18
+ options[:url] ||= show_url(options[:key])
19
+ puts "URL: #{options[:url]}"
20
+ super(options)
21
+ end
22
+
23
+ def unmarshall(xml)
24
+ records = xml.xpath("//atom:entry", ns_tag("atom")).collect do |record|
25
+ id = record.xpath("atom:id", ns_tag("atom")).first.text
26
+ spreadsheet_id = id.gsub("http://spreadsheets.google.com/feeds/([^\/]+)/tables", "\1")
27
+ id = id.gsub("http://spreadsheets.google.com/feeds/([^\/]+)/tables/([^\/]+)", "\2")
28
+ title = record.xpath("atom:title", ns_tag("atom")).first.text
29
+ summary = record.xpath("atom:summary", ns_tag("atom")).first.text
30
+ content = record.xpath("atom:content", ns_tag("atom")).first.text
31
+ data = record.xpath("gs:data", ns_tag("gs"))
32
+ num_rows = data["numRows"].to_i
33
+ start_row = data["startRow"].to_i
34
+ columns = []
35
+ data.xpath("gs:column", ns_tag("gs")).each do |column|
36
+ columns << {:name => column["name"], :index => column["index"]}
37
+ end
38
+ columns = columns.sort {|a,b| b["index"] <=> a["index"]}.collect{|c| c["name"]}
39
+ created_at = record.xpath("atom:published", ns_tag("atom")).text
40
+ updated_at = record.xpath("atom:updated", ns_tag("atom")).text
41
+
42
+ Googletastic::Table.new(
43
+ :id => id,
44
+ :spreadsheet_id => spreadsheet_id,
45
+ :title => title,
46
+ :summary => summary,
47
+ :content => content,
48
+ :start_row => start_row,
49
+ :num_rows => num_rows,
50
+ :columns => columns,
51
+ :updated_at => DateTime.parse(updated_at),
52
+ :raw => record.to_xml
53
+ )
54
+ end
55
+ records
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,47 @@
1
+ class Googletastic::Worksheet < Googletastic::Base
2
+
3
+ attr_accessor :title, :content, :spreadsheet_id
4
+
5
+ # Time.now.xmlschema
6
+ class << self
7
+
8
+ def client_class
9
+ "Spreadsheets"
10
+ end
11
+
12
+ def show_url(id)
13
+ "http://spreadsheets.google.com/feeds/worksheets/#{id}/private/full"
14
+ end
15
+
16
+ def build_url(options)
17
+ raise "You must specify an spreadsheet key 'key' for a worksheet" unless options[:key]
18
+ options[:url] ||= show_url(options[:key])
19
+ super(options)
20
+ end
21
+
22
+ def unmarshall(xml)
23
+ records = xml.xpath("//atom:entry", ns_tag("atom")).collect do |record|
24
+ id = record.xpath("atom:id", ns_tag("atom")).first.text
25
+ ids = id =~ /http:\/\/spreadsheets\.google\.com\/feeds\/worksheets\/([^\/]+)\/([^\/]+)/
26
+ spreadsheet_id = $1
27
+ id = $2
28
+ title = record.xpath("atom:title", ns_tag("atom")).first.text
29
+ content = record.xpath("atom:content", ns_tag("atom")).first.text
30
+ updated_at = record.xpath("atom:updated", ns_tag("atom")).text
31
+
32
+ worksheet = Googletastic::Worksheet.new(
33
+ :id => id,
34
+ :spreadsheet_id => spreadsheet_id,
35
+ :title => title,
36
+ :content => content,
37
+ :updated_at => DateTime.parse(updated_at),
38
+ :raw => record.to_xml
39
+ )
40
+
41
+ worksheet
42
+ end
43
+ records
44
+ end
45
+
46
+ end
47
+ end
data/spec/config.yml CHANGED
@@ -2,5 +2,4 @@ username: "flexinstyle@gmail.com"
2
2
  password: "flexyflexy"
3
3
  application: "Googletastic Test"
4
4
  account_type: "HOSTED_OR_GOOGLE"
5
- youtube_login: "MrFlexinstyle"
6
- youtube_dev_key: "AI39si7jkhs_ECjF4unOQz8gpWGSKXgq0KJpm8wywkvBSw4s8oJd5p5vkpvURHBNh-hiYJtoKwQqSfot7KoCkeCE32rNcZqMxA"
5
+ youtube_login: "MrFlexinstyle"
@@ -1,4 +1,4 @@
1
- ?xml version="1.0" encoding="UTF-8"?>
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
2
  <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:docs="http://schemas.google.com/docs/2007" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;CkACSH88eip7ImA9WxBaEUQ.&quot;">
3
3
  <id>http://docs.google.com/feeds/documents/private/full</id>
4
4
  <updated>2010-03-21T16:59:29.172Z</updated>
@@ -14,6 +14,7 @@ describe Googletastic::Document do
14
14
  doc = Googletastic::Document.first
15
15
  doc.should_not == nil
16
16
  doc.title.should_not be_empty
17
+ puts doc.inspect
17
18
  end
18
19
 
19
20
  it "should find all documents from google docs, and they should be an array" do
@@ -2,8 +2,46 @@ require File.expand_path("./spec/spec_helper")
2
2
 
3
3
  describe Googletastic::Spreadsheet do
4
4
 
5
+ it "should retrieve the records from a single spreadsheet" do
6
+ spreadsheet = Googletastic::Spreadsheet.find("tDewl4JDeSOAMMOiG9i2u-Q")
7
+ puts spreadsheet.inspect
8
+ spreadsheet.should be_an_instance_of(Googletastic::Spreadsheet)
9
+ end
10
+ =begin
5
11
  it "should retrieve a list of spreadsheets" do
6
- puts Googletastic::Spreadsheet.all.inspect
12
+ Googletastic::Spreadsheet.all
13
+ end
14
+
15
+ it "should retrieve a spreadsheets worksheet" do
16
+ Googletastic::Spreadsheet.first.worksheet.should_not be_nil
17
+ end
18
+
19
+ it "should retrieve a table within a spreadsheet" do
20
+ pending
21
+ end
22
+
23
+ it "should retrieve a list of rows for a worksheet" do
24
+ rows = Googletastic::Spreadsheet.find("tDewl4JDeSOAMMOiG9i2u-Q&hl").rows
25
+ rows.each do |row|
26
+ puts row.data.inspect
27
+ # row.save
28
+ end
29
+ end
30
+
31
+ it "should retrieve the form for the spreadsheet" do
32
+ form = Googletastic::Spreadsheet.first.form
33
+ puts form.inspect
7
34
  end
8
35
 
36
+ it "should retrieve the form AND the formkey for the spreadsheet form" do
37
+ form = Googletastic::Spreadsheet.first.form
38
+ form.form_key
39
+ end
40
+
41
+ it "should create a map of input entries to spreadsheet row data properties" do
42
+ spreadsheet = Googletastic::Spreadsheet.first
43
+ form = spreadsheet.form
44
+ form.set_defaults(spreadsheet.rows.first.data)
45
+ end
46
+ =end
9
47
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Lance Pollard
@@ -110,11 +110,14 @@ files:
110
110
  - lib/googletastic/mixins/requesting.rb
111
111
  - lib/googletastic/mixins.rb
112
112
  - lib/googletastic/person.rb
113
+ - lib/googletastic/row.rb
113
114
  - lib/googletastic/spreadsheet.rb
114
115
  - lib/googletastic/sync/document.rb
115
116
  - lib/googletastic/sync/form.rb
116
117
  - lib/googletastic/sync.rb
118
+ - lib/googletastic/table.rb
117
119
  - lib/googletastic/thumbnail.rb
120
+ - lib/googletastic/worksheet.rb
118
121
  - lib/googletastic/youtube.rb
119
122
  - lib/googletastic.rb
120
123
  - spec/benchmarks/document_benchmark.rb