hmcgowan-roo 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,9 +1,6 @@
1
1
  # README for Roo
2
2
 
3
- This is the semi-official roo repository. I've been unable to contact the maintainer so this
4
- repository should allow us to continue in the interim. If you'd like to contribute I'm happy
5
- to pull your changes in and will be making periodic releases from here until we can get
6
- the gems on RubyForge.
3
+ This is now the official roo repository and I'll be making a release on RubyForge in the next few weeks.
7
4
 
8
5
 
9
6
  ## Installation
data/lib/roo/google.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'gdata/spreadsheet'
2
+ gem 'libxml-ruby', '>= 0.8.3'
3
+ require 'xml'
2
4
 
3
5
  # overwrite some methods from the gdata-gem:
4
6
  module GData
@@ -45,7 +47,7 @@ XML
45
47
  def add_to_cell_roo(row,col,value, sheet_no=1)
46
48
  save_entry_roo(entry_roo(value,row,col), sheet_no)
47
49
  end
48
-
50
+
49
51
  #-- new
50
52
  def get_one_sheet
51
53
  path = "/feeds/cells/#{@spreadsheet_id}/1/private/full"
@@ -70,11 +72,19 @@ XML
70
72
  doc = Hpricot(request(path))
71
73
  return doc
72
74
  end
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
+
73
82
  end # class
74
83
  end # module
75
84
 
76
85
  class Google < GenericSpreadsheet
77
-
86
+ attr_accessor :date_format, :datetime_format
87
+
78
88
  # Creates a new Google spreadsheet object.
79
89
  def initialize(spreadsheetkey,user=nil,password=nil)
80
90
  @filename = spreadsheetkey
@@ -89,6 +99,7 @@ class Google < GenericSpreadsheet
89
99
  end
90
100
  @default_sheet = nil
91
101
  @cell = Hash.new
102
+ @cell_name = Hash.new
92
103
  @cell_type = Hash.new
93
104
  @formula = Hash.new
94
105
  @first_row = Hash.new
@@ -97,10 +108,11 @@ class Google < GenericSpreadsheet
97
108
  @last_column = Hash.new
98
109
  @cells_read = Hash.new
99
110
  @header_line = 1
100
-
111
+ @date_format = '%d/%m/%Y'
112
+ @datetime_format = '%d/%m/%Y %H:%M:%S'
113
+ @time_format = '%H:%M:%S'
101
114
  @gs = GData::Spreadsheet.new(spreadsheetkey)
102
115
  @gs.authenticate(user, password)
103
-
104
116
  #-- ----------------------------------------------------------------------
105
117
  #-- TODO: Behandlung von Berechtigungen hier noch einbauen ???
106
118
  #-- ----------------------------------------------------------------------
@@ -115,29 +127,41 @@ class Google < GenericSpreadsheet
115
127
  return @gs.sheetlist
116
128
  end
117
129
 
118
- # is String a date with format DD/MM/YYYY
119
- def Google.date?(string)
130
+ def date?(string)
120
131
  return false if string.class == Float
121
132
  return true if string.class == Date
122
- return string.strip =~ /^([0-9]+)\/([0-9]+)\/([0-9]+)$/
133
+ begin
134
+ Date.strptime(string, @date_format)
135
+ true
136
+ rescue
137
+ false
138
+ end
123
139
  end
124
140
 
125
141
  # is String a time with format HH:MM:SS?
126
- def Google.time?(string)
142
+ def time?(string)
127
143
  return false if string.class == Float
128
144
  return true if string.class == Date
129
- return string.strip =~ /^([0-9]+):([0-9]+):([0-9]+)$/
145
+ begin
146
+ DateTime.strptime(string, @time_format)
147
+ true
148
+ rescue
149
+ false
150
+ end
130
151
  end
131
152
 
132
- # is String a date+time with format DD/MM/YYYY HH:MM:SS
133
- def Google.datetime?(string)
153
+ def datetime?(string)
134
154
  return false if string.class == Float
135
155
  return true if string.class == Date
136
- return string.strip =~ /^([0-9]+)\/([0-9]+)\/([0-9]+)\ ([0-9]+):([0-9]+):([0-9]+)$/
156
+ begin
157
+ DateTime.strptime(string, @datetime_format)
158
+ true
159
+ rescue
160
+ false
161
+ end
137
162
  end
138
163
 
139
-
140
- def Google.timestring_to_seconds(value)
164
+ def timestring_to_seconds(value)
141
165
  hms = value.split(':')
142
166
  hms[0].to_i*3600 + hms[1].to_i*60 + hms[2].to_i
143
167
  end
@@ -151,24 +175,21 @@ class Google < GenericSpreadsheet
151
175
  check_default_sheet #TODO: 2007-12-16
152
176
  read_cells(sheet) unless @cells_read[sheet]
153
177
  row,col = normalize(row,col)
178
+ value = @cell[sheet]["#{row},#{col}"]
154
179
  if celltype(row,col,sheet) == :date
155
- yyyy,mm,dd = @cell[sheet]["#{row},#{col}"].split('-')
156
180
  begin
157
- return Date.new(yyyy.to_i,mm.to_i,dd.to_i)
181
+ return Date.strptime(value, @date_format)
158
182
  rescue ArgumentError
159
- raise "Invalid date parameter: #{yyyy}, #{mm}, #{dd}"
183
+ raise "Invalid Date #{sheet}[#{row},#{col}] #{value} using format '{@date_format}'"
160
184
  end
161
185
  elsif celltype(row,col,sheet) == :datetime
162
186
  begin
163
- date_part,time_part = @cell[sheet]["#{row},#{col}"].split(' ')
164
- yyyy,mm,dd = date_part.split('-')
165
- hh,mi,ss = time_part.split(':')
166
- return DateTime.civil(yyyy.to_i,mm.to_i,dd.to_i,hh.to_i,mi.to_i,ss.to_i)
187
+ return DateTime.strptime(value, @datetime_format)
167
188
  rescue ArgumentError
168
- raise "Invalid date parameter: #{yyyy}, #{mm}, #{dd}, #{hh}, #{mi}, #{ss}"
189
+ raise "Invalid DateTime #{sheet}[#{row},#{col}] #{value} using format '{@datetime_format}'"
169
190
  end
170
191
  end
171
- return @cell[sheet]["#{row},#{col}"]
192
+ return value
172
193
  end
173
194
 
174
195
  # returns the type of a cell:
@@ -291,8 +312,13 @@ class Google < GenericSpreadsheet
291
312
  end
292
313
  row,col = normalize(row,col)
293
314
  @gs.add_to_cell_roo(row,col,value,sheet_no)
315
+ # 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)
319
+ end
294
320
  end
295
-
321
+
296
322
  # returns the first non-empty row in a sheet
297
323
  def first_row(sheet=nil)
298
324
  sheet = @default_sheet unless sheet
@@ -335,61 +361,67 @@ class Google < GenericSpreadsheet
335
361
 
336
362
  private
337
363
 
338
- # read all cells in a sheet
339
- def read_cells(sheet=nil)
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)
340
367
  sheet = @default_sheet unless sheet
341
368
  raise RangeError, "illegal sheet <#{sheet}>" unless sheets.index(sheet)
342
369
  sheet_no = sheets.index(sheet)+1
343
- doc = @gs.fulldoc(sheet_no)
344
- (doc/"gs:cell").each {|item|
345
- row = item['row']
346
- col = item['col']
347
- value = item['inputvalue']
348
- numericvalue = item['numericvalue']
349
- if value[0,1] == '='
350
- formula = value
351
- else
352
- formula = nil
353
- end
354
- @cell_type[sheet] = {} unless @cell_type[sheet]
355
- if formula
356
- ty = :formula
357
- if numeric?(numericvalue)
358
- value = numericvalue.to_f
359
- else
360
- value = numericvalue
370
+ @cell_name[sheet] ||= {}
371
+ xml = cell_name ? @gs.celldoc(sheet_no, cell_name).to_s : @gs.fulldoc(sheet_no).to_s
372
+ doc = XML::Parser.string(xml).parse
373
+ doc.find("//*[local-name()='entry']").each do |entry|
374
+ key = nil;
375
+ cell_name = nil;
376
+ entry.each do |element|
377
+ next unless element.name == 'category'
378
+ cell_name = nil
379
+ 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'
384
+ row = item['row']
385
+ 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
+ key = "#{row},#{col}"
415
+ @cell[sheet] ||= {}
416
+ @cell[sheet][key] = value unless value == "" or value == nil
417
+ @cell_type[sheet][key] = ty # Openoffice.oo_type_2_roo_type(vt)
418
+ end
419
+ @formula[sheet] = {} unless @formula[sheet]
420
+ @formula[sheet][key] = formula if formula
361
421
  end
362
- elsif Google.date?(value)
363
- ty = :date
364
- elsif Google.datetime?(value)
365
- ty = :datetime
366
- elsif numeric?(value) # or o.class ???
367
- ty = :float
368
- value = value.to_f
369
- elsif Google.time?(value)
370
- ty = :time
371
- value = Google.timestring_to_seconds(value)
372
- else
373
- ty = :string
374
- end
375
- key = "#{row},#{col}"
376
- @cell[sheet] = {} unless @cell[sheet]
377
- if ty == :date
378
- dd,mm,yyyy = value.split('/')
379
- @cell[sheet][key] = sprintf("%04d-%02d-%02d",yyyy.to_i,mm.to_i,dd.to_i)
380
- elsif ty == :datetime
381
- date_part,time_part = value.split(' ')
382
- dd,mm,yyyy = date_part.split('/')
383
- hh,mi,ss = time_part.split(':')
384
- @cell[sheet][key] = sprintf("%04d-%02d-%02d %02d:%02d:%02d",
385
- yyyy.to_i,mm.to_i,dd.to_i,hh.to_i,mi.to_i,ss.to_i)
386
- else
387
- @cell[sheet][key] = value unless value == "" or value == nil
388
422
  end
389
- @cell_type[sheet][key] = ty # Openoffice.oo_type_2_roo_type(vt)
390
- @formula[sheet] = {} unless @formula[sheet]
391
- @formula[sheet][key] = formula if formula
392
- }
423
+ @cell_name[sheet][key] = cell_name if cell_name && key
424
+ end
393
425
  @cells_read[sheet] = true
394
426
  end
395
427
 
@@ -397,15 +429,6 @@ class Google < GenericSpreadsheet
397
429
  string =~ /^[0-9]+[\.]*[0-9]*$/
398
430
  end
399
431
 
400
- # convert string DD/MM/YYYY into a Date-object
401
- #TODO: was ist mit verschiedenen Typen der Datumseingabe bei Google?
402
- def Google.to_date(string)
403
- if string.strip =~ /^([0-9]+)\/([0-9]+)\/([0-9]+)$/
404
- return Date.new($3.to_i,$2.to_i,$1.to_i)
405
- else
406
- return nil
407
- end
408
- end
409
432
 
410
433
 
411
434
  end # class
@@ -1,4 +1,5 @@
1
1
  def spreadsheet(spreadsheet, sheets, options={})
2
+ @rspreadsheet = spreadsheet
2
3
  coordinates = true # default
3
4
  o=""
4
5
  if options[:coordinates] != nil
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 = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/test/test_roo.rb CHANGED
@@ -44,17 +44,27 @@ end
44
44
  class Test::Unit::TestCase
45
45
  def key_of(spreadsheetname)
46
46
  begin
47
+
47
48
  return {
48
- 'numbers1' => "o10837434939102457526.4784396906364855777",
49
- 'borders' => "o10837434939102457526.664868920231926255",
50
- 'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
49
+ 'formula' => 'rt4Pw1WmjxFtyfrqqy94wPw',
50
+ "write.me" => 'r6m7HFlUOwst0RTUTuhQ0Ow',
51
+ 'numbers1' => "rYraCzjxTtkxw1NxHJgDU8Q",
52
+ 'borders' => "r_nLYMft6uWg_PT9Rc2urXw",
53
+ 'simple_spreadsheet' => "r3aMMCBCA153TmU_wyIaxfw",
51
54
  'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
52
- "only_one_sheet" => "o10837434939102457526.762705759906130135",
53
- "write.me" => 'ptu6bbahNZpY0N0RrxQbWdw&hl',
54
- 'formula' => 'o10837434939102457526.3022866619437760118',
55
- 'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
56
- 'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
55
+ "only_one_sheet" => "rqRtkcPJ97nhQ0m9ksDw2rA",
56
+ 'time-test' => 'r2XfDBJMrLPjmuLrPQQrEYw',
57
+ 'datetime' => "r2kQpXWr6xOSUpw9MyXavYg",
57
58
  }[spreadsheetname]
59
+ # 'numbers1' => "o10837434939102457526.4784396906364855777",
60
+ # 'borders' => "o10837434939102457526.664868920231926255",
61
+ # 'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
62
+ # 'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
63
+ # "only_one_sheet" => "o10837434939102457526.762705759906130135",
64
+ # "write.me" => 'ptu6bbahNZpY0N0RrxQbWdw&hl',
65
+ # 'formula' => 'o10837434939102457526.3022866619437760118',
66
+ # 'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
67
+ # 'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
58
68
  rescue
59
69
  raise "unknown spreadsheetname: #{spreadsheetname}"
60
70
  end
@@ -129,18 +139,21 @@ class TestRoo < Test::Unit::TestCase
129
139
  assert_equal 42*60, 42.minutes
130
140
  end
131
141
 
142
+ # Using Date.strptime so check that it's using the method
143
+ # with the value set in date_format
132
144
  def test_date
133
- assert Google.date?("21/11/1962")
134
- assert_equal Date.new(1962,11,21), Google.to_date("21/11/1962")
135
-
136
- assert !Google.date?("21")
137
- assert_nil Google.to_date("21")
138
-
139
- assert !Google.date?("21/11")
140
- assert_nil Google.to_date("21/11")
141
-
142
- assert !Google.date?("Mittwoch/21/1961")
143
- assert_nil Google.to_date("Mittwoch/21/1961")
145
+ if GOOGLE
146
+ oo = Google.new(key_of("numbers1"))
147
+ # should default to DDMMYYYY
148
+ assert oo.date?("21/11/1962") == true
149
+ assert oo.date?("11/21/1962") == false
150
+ oo.date_format = '%m/%d/%Y'
151
+ assert oo.date?("21/11/1962") == false
152
+ assert oo.date?("11/21/1962") == true
153
+ oo.date_format = '%Y-%m-%d'
154
+ assert oo.date?("1962-11-21") == true
155
+ assert oo.date?("1962-21-11") == false
156
+ end
144
157
  end
145
158
 
146
159
  def test_classes
@@ -439,25 +452,19 @@ class TestRoo < Test::Unit::TestCase
439
452
  assert_equal 8, oo.cell(2,4)
440
453
  assert_equal 9, oo.cell(2,5)
441
454
  assert_equal "test", oo.cell(2,6)
442
- # assert_equal "string", oo.celltype(2,6)
443
455
  assert_equal :string, oo.celltype(2,6)
444
456
  assert_equal 11, oo.cell(2,7)
445
- # assert_equal "float", oo.celltype(2,7)
446
457
  assert_equal :float, oo.celltype(2,7), "Inhalt: --#{oo.cell(2,7)}--"
447
-
448
458
  assert_equal 10, oo.cell(4,1)
449
459
  assert_equal 11, oo.cell(4,2)
450
460
  assert_equal 12, oo.cell(4,3)
451
461
  assert_equal 13, oo.cell(4,4)
452
462
  assert_equal 14, oo.cell(4,5)
453
-
454
463
  assert_equal 10, oo.cell(4,'A')
455
464
  assert_equal 11, oo.cell(4,'B')
456
465
  assert_equal 12, oo.cell(4,'C')
457
466
  assert_equal 13, oo.cell(4,'D')
458
467
  assert_equal 14, oo.cell(4,'E')
459
-
460
- # assert_equal "date", oo.celltype(5,1)
461
468
  assert_equal :date, oo.celltype(5,1)
462
469
  assert_equal Date.new(1961,11,21), oo.cell(5,1)
463
470
  assert_equal "1961-11-21", oo.cell(5,1).to_s
@@ -1974,7 +1981,7 @@ class TestRoo < Test::Unit::TestCase
1974
1981
  end
1975
1982
  end
1976
1983
 
1977
- def SKIP_test_excel_zipped
1984
+ def test_excel_zipped
1978
1985
  after Date.new(2009,1,10) do
1979
1986
  if EXCEL
1980
1987
  $log.level = Logger::DEBUG
@@ -2259,12 +2266,12 @@ class TestRoo < Test::Unit::TestCase
2259
2266
  oo.default_sheet = oo.sheets.first
2260
2267
  assert oo.to_csv("/tmp/numbers1.csv")
2261
2268
  assert File.exists?("/tmp/numbers1.csv")
2262
- assert_equal "", `diff test/numbers1.csv /tmp/numbers1.csv`
2269
+ assert_equal "", `diff #{File.join(TESTDIR,"numbers1.csv")} /tmp/numbers1.csv`
2263
2270
 
2264
2271
  # bug?, 2008-01-15 from Troy Davis
2265
2272
  assert oo.to_csv("/tmp/numbers1.csv",oo.sheets.first)
2266
2273
  assert File.exists?("/tmp/numbers1.csv")
2267
- assert_equal "", `diff test/numbers1.csv /tmp/numbers1.csv`
2274
+ assert_equal "", `diff #{File.join(TESTDIR,"numbers1.csv")} /tmp/numbers1.csv`
2268
2275
 
2269
2276
  end # Timeout
2270
2277
  #} # nothing_raised
@@ -3222,6 +3229,7 @@ class TestRoo < Test::Unit::TestCase
3222
3229
  oo = Google.new(key_of("simple_spreadsheet"))
3223
3230
  oo.default_sheet = oo.sheets.first
3224
3231
  oo.header_line = 3
3232
+ oo.date_format = '%m/%d/%Y'
3225
3233
  erg = oo.find(:all, :conditions => {'Comment' => 'Task 1'})
3226
3234
  assert_equal Date.new(2007,05,07), erg[1]['Date']
3227
3235
  assert_equal 10.75 , erg[1]['Start time']
@@ -3417,12 +3425,10 @@ class TestRoo < Test::Unit::TestCase
3417
3425
  }
3418
3426
  end
3419
3427
  if GOOGLE
3420
- after Date.new(2009,1,15) do
3421
- assert_raise(IOError) {
3422
- # oo = Google.new(key_of('testnichtvorhanden'+'Bibelbund.ods'))
3423
- oo = Google.new('testnichtvorhanden')
3424
- }
3425
- end
3428
+ # assert_raise(Net::HTTPServerException) {
3429
+ # oo = Google.new(key_of('testnichtvorhanden'+'Bibelbund.ods'))
3430
+ # oo = Google.new('testnichtvorhanden')
3431
+ # }
3426
3432
  end
3427
3433
  end
3428
3434
 
@@ -3441,11 +3447,12 @@ class TestRoo < Test::Unit::TestCase
3441
3447
  def test_write_google
3442
3448
  # write.me: http://spreadsheets.google.com/ccc?key=ptu6bbahNZpY0N0RrxQbWdw&hl=en_GB
3443
3449
  if GOOGLE
3444
- oo = Google.new('ptu6bbahNZpY0N0RrxQbWdw')
3450
+ oo = Google.new(key_of('write.me'))
3445
3451
  oo.default_sheet = oo.sheets.first
3446
3452
  oo.set_value(1,1,"hello from the tests")
3447
- #oo.set_value(1,1,"sin(1)")
3448
3453
  assert_equal "hello from the tests", oo.cell(1,1)
3454
+ oo.set_value(1,1, 1.0)
3455
+ assert_equal 1.0, oo.cell(1,1)
3449
3456
  end
3450
3457
  end
3451
3458
 
@@ -3454,7 +3461,7 @@ class TestRoo < Test::Unit::TestCase
3454
3461
  if GOOGLE
3455
3462
  content1 = 'AAA'
3456
3463
  content2 = 'BBB'
3457
- oo = Google.new('ptu6bbahNZpY0N0RrxQbWdw')
3464
+ oo = Google.new(key_of('write.me'))
3458
3465
  oo.default_sheet = oo.sheets.first
3459
3466
  oo.set_value(1,1,content1)
3460
3467
  oo.default_sheet = oo.sheets[1]
@@ -3470,7 +3477,7 @@ class TestRoo < Test::Unit::TestCase
3470
3477
  if GOOGLE
3471
3478
  random_row = rand(10)+1
3472
3479
  random_column = rand(10)+1
3473
- oo = Google.new('ptu6bbahNZpY0N0RrxQbWdw')
3480
+ oo = Google.new(key_of('write.me'))
3474
3481
  oo.default_sheet = oo.sheets.first
3475
3482
  content1 = 'ABC'
3476
3483
  content2 = 'DEF'
@@ -3697,7 +3704,7 @@ Sheet 3:
3697
3704
  oo.default_sheet = oo.sheets.first
3698
3705
  assert oo.to_csv("/tmp/time-test.csv")
3699
3706
  assert File.exists?("/tmp/time-test.csv")
3700
- assert_equal "", `diff test/time-test.csv /tmp/time-test.csv`
3707
+ assert_equal "", `diff #{File.join(TESTDIR,"time-test.csv")} /tmp/time-test.csv`
3701
3708
  end # GOOGLE
3702
3709
  end
3703
3710
 
@@ -4632,7 +4639,7 @@ This attached file is the newer format of Microsoft Excel (.xlsx).
4632
4639
  end
4633
4640
 
4634
4641
  def do_datetime_tests(oo)
4635
- val = oo.cell('c',3)
4642
+ val = oo.cell('c',3)
4636
4643
  assert_kind_of DateTime, val
4637
4644
  assert_equal :datetime, oo.celltype('c',3)
4638
4645
  assert_equal DateTime.new(1961,11,21,12,17,18), val
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.1
4
+ version: 1.3.2
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-04-21 00:00:00 -07:00
13
+ date: 2009-05-25 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -129,7 +129,7 @@ files:
129
129
  - test/time-test.xlsx
130
130
  - README.markdown
131
131
  - History.txt
132
- has_rdoc: true
132
+ has_rdoc: false
133
133
  homepage: http://roo.rubyforge.org
134
134
  post_install_message:
135
135
  rdoc_options:
@@ -156,7 +156,7 @@ requirements: []
156
156
  rubyforge_project: roo
157
157
  rubygems_version: 1.2.0
158
158
  signing_key:
159
- specification_version: 2
159
+ specification_version: 3
160
160
  summary: roo
161
161
  test_files: []
162
162