hmcgowan-roo 1.3.2 → 1.3.3

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/roo/excelx.rb CHANGED
@@ -165,7 +165,6 @@ class Excelx < GenericSpreadsheet
165
165
  yyyy,mm,dd = date_part.split('-')
166
166
  hh,mi,ss = time_part.split(':')
167
167
  return DateTime.civil(yyyy.to_i,mm.to_i,dd.to_i,hh.to_i,mi.to_i,ss.to_i)
168
-
169
168
  end
170
169
  @cell[sheet][[row,col]]
171
170
  end
data/lib/roo/google.rb CHANGED
@@ -73,12 +73,6 @@ XML
73
73
  return doc
74
74
  end
75
75
 
76
- def celldoc(sheet_no, cell_name)
77
- path = "/feeds/cells/#{@spreadsheet_id}/#{sheet_no}/private/full" + cell_name
78
- doc = Hpricot(request(path))
79
- return doc
80
- end
81
-
82
76
  end # class
83
77
  end # module
84
78
 
@@ -98,9 +92,8 @@ class Google < GenericSpreadsheet
98
92
  password = ENV['GOOGLE_PASSWORD']
99
93
  end
100
94
  @default_sheet = nil
101
- @cell = Hash.new
102
- @cell_name = Hash.new
103
- @cell_type = Hash.new
95
+ @cell = Hash.new {|h,k| h[k]=Hash.new}
96
+ @cell_type = Hash.new {|h,k| h[k]=Hash.new}
104
97
  @formula = Hash.new
105
98
  @first_row = Hash.new
106
99
  @last_row = Hash.new
@@ -113,6 +106,7 @@ class Google < GenericSpreadsheet
113
106
  @time_format = '%H:%M:%S'
114
107
  @gs = GData::Spreadsheet.new(spreadsheetkey)
115
108
  @gs.authenticate(user, password)
109
+ @sheetlist = @gs.sheetlist
116
110
  #-- ----------------------------------------------------------------------
117
111
  #-- TODO: Behandlung von Berechtigungen hier noch einbauen ???
118
112
  #-- ----------------------------------------------------------------------
@@ -124,12 +118,10 @@ class Google < GenericSpreadsheet
124
118
 
125
119
  # returns an array of sheet names in the spreadsheet
126
120
  def sheets
127
- return @gs.sheetlist
121
+ @sheetlist
128
122
  end
129
123
 
130
124
  def date?(string)
131
- return false if string.class == Float
132
- return true if string.class == Date
133
125
  begin
134
126
  Date.strptime(string, @date_format)
135
127
  true
@@ -140,8 +132,6 @@ class Google < GenericSpreadsheet
140
132
 
141
133
  # is String a time with format HH:MM:SS?
142
134
  def time?(string)
143
- return false if string.class == Float
144
- return true if string.class == Date
145
135
  begin
146
136
  DateTime.strptime(string, @time_format)
147
137
  true
@@ -151,8 +141,6 @@ class Google < GenericSpreadsheet
151
141
  end
152
142
 
153
143
  def datetime?(string)
154
- return false if string.class == Float
155
- return true if string.class == Date
156
144
  begin
157
145
  DateTime.strptime(string, @datetime_format)
158
146
  true
@@ -161,6 +149,10 @@ class Google < GenericSpreadsheet
161
149
  end
162
150
  end
163
151
 
152
+ def numeric?(string)
153
+ string =~ /^[0-9]+[\.]*[0-9]*$/
154
+ end
155
+
164
156
  def timestring_to_seconds(value)
165
157
  hms = value.split(':')
166
158
  hms[0].to_i*3600 + hms[1].to_i*60 + hms[2].to_i
@@ -313,9 +305,11 @@ class Google < GenericSpreadsheet
313
305
  row,col = normalize(row,col)
314
306
  @gs.add_to_cell_roo(row,col,value,sheet_no)
315
307
  # re-read the portion of the document that has changed
316
- if @cells_read[sheet]
317
- cell_name = @cell_name[sheet]["#{row},#{col}"]
318
- read_cells(sheet, cell_name)
308
+ if @cells_read[sheet]
309
+ key = "#{row},#{col}"
310
+ (value, value_type) = determine_datatype(value.to_s)
311
+ @cell[sheet][key] = value
312
+ @cell_type[sheet][key] = value_type
319
313
  end
320
314
  end
321
315
 
@@ -361,74 +355,60 @@ class Google < GenericSpreadsheet
361
355
 
362
356
  private
363
357
 
364
- # read all cells in a sheet. if the cell_name is
365
- # specified, only return the XML pertaining to that cell
366
- def read_cells(sheet=nil, cell_name=nil)
358
+ # read all cells in a sheet.
359
+ def read_cells(sheet=nil)
367
360
  sheet = @default_sheet unless sheet
368
361
  raise RangeError, "illegal sheet <#{sheet}>" unless sheets.index(sheet)
369
362
  sheet_no = sheets.index(sheet)+1
370
- @cell_name[sheet] ||= {}
371
- xml = cell_name ? @gs.celldoc(sheet_no, cell_name).to_s : @gs.fulldoc(sheet_no).to_s
363
+ xml = @gs.fulldoc(sheet_no).to_s
372
364
  doc = XML::Parser.string(xml).parse
373
365
  doc.find("//*[local-name()='entry']").each do |entry|
374
366
  key = nil;
375
- cell_name = nil;
376
367
  entry.each do |element|
377
368
  next unless element.name == 'category'
378
- cell_name = nil
379
369
  element.each do |item|
380
- case item.name
381
- when 'link'
382
- cell_name = item['href'][/\/R\d+C\d+/] if item['rel'] == 'self'
383
- when 'cell'
370
+ if item.name == 'cell'
384
371
  row = item['row']
385
372
  col = item['col']
386
- value = item['inputvalue'] || item['inputValue']
387
- numericvalue = item['numericvalue'] || item['numericValue']
388
- if value[0,1] == '='
389
- formula = value
390
- else
391
- formula = nil
392
- end
393
- @cell_type[sheet] ||= {}
394
- if formula
395
- ty = :formula
396
- if numeric?(numericvalue)
397
- value = numericvalue.to_f
398
- else
399
- value = numericvalue
400
- end
401
- elsif datetime?(value)
402
- ty = :datetime
403
- elsif date?(value)
404
- ty = :date
405
- elsif numeric?(value) # or o.class ???
406
- ty = :float
407
- value = value.to_f
408
- elsif time?(value)
409
- ty = :time
410
- value = timestring_to_seconds(value)
411
- else
412
- ty = :string
413
- end
414
373
  key = "#{row},#{col}"
415
- @cell[sheet] ||= {}
374
+ string_value = item['inputvalue'] || item['inputValue']
375
+ numeric_value = item['numericvalue'] || item['numericValue']
376
+ (value, value_type) = determine_datatype(string_value, numeric_value)
416
377
  @cell[sheet][key] = value unless value == "" or value == nil
417
- @cell_type[sheet][key] = ty # Openoffice.oo_type_2_roo_type(vt)
378
+ @cell_type[sheet][key] = value_type
418
379
  end
419
380
  @formula[sheet] = {} unless @formula[sheet]
420
- @formula[sheet][key] = formula if formula
381
+ @formula[sheet][key] = string_value if value_type == :formula
421
382
  end
422
383
  end
423
- @cell_name[sheet][key] = cell_name if cell_name && key
424
384
  end
425
385
  @cells_read[sheet] = true
426
386
  end
427
-
428
- def numeric?(string)
429
- string =~ /^[0-9]+[\.]*[0-9]*$/
387
+
388
+ def determine_datatype(val, numval=nil)
389
+ if val[0,1] == '='
390
+ ty = :formula
391
+ if numeric?(numval)
392
+ val = numval.to_f
393
+ else
394
+ val = numval
395
+ end
396
+ else
397
+ if datetime?(val)
398
+ ty = :datetime
399
+ elsif date?(val)
400
+ ty = :date
401
+ elsif numeric?(val)
402
+ ty = :float
403
+ val = val.to_f
404
+ elsif time?(val)
405
+ ty = :time
406
+ val = timestring_to_seconds(val)
407
+ else
408
+ ty = :string
409
+ end
410
+ end
411
+ return val, ty
430
412
  end
431
-
432
-
433
-
413
+
434
414
  end # class
data/lib/roo/version.rb CHANGED
@@ -2,7 +2,7 @@ module Roo #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 3
5
- TINY = 2
5
+ TINY = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hmcgowan-roo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hugh McGowan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-05-25 00:00:00 -07:00
13
+ date: 2009-05-28 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency