roo 1.9.5 → 1.9.6

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,8 +1,18 @@
1
+ == 1.9.6 2011-08-03
2
+ * 1 enhancement
3
+ * new class Libreoffice (Libreoffice should do exactly the same as the Openoffice
4
+ class. It's just another name. Technically, Libreoffice is inherited from
5
+ the Openoffice class with no new methods.
6
+ * 3 bugfixes
7
+ * Openoffice: file type check, deletion of temporary files not in ensure clause
8
+ * Cell type :datetime was not handled in the to_csv method
9
+ * Better deletion of temporary directories if something went wrong
10
+
1
11
  == 1.9.5 2011-06-25
2
12
 
3
13
  * 1 enhancement
4
14
  * Method #formulas moved to generic-spreadsheet class (the Excel version is
5
- overwritten because the spreadsheet gem currently does not support
15
+ overwritten because the spreadsheet gem currently does not support
6
16
  formulas.
7
17
  * 3 bugfixes
8
18
  * Openoffice/Excelx/Google: #formulas of an empty sheet should not result
data/Rakefile CHANGED
@@ -26,6 +26,8 @@ Bones {
26
26
  #depend_on 'febeling-rubyzip','>= 0.9.2' # meine aktuelle Version
27
27
  #TODO: warum brauchen wir das? es lief doch auch vorher ohne dieses spezielle gem
28
28
  depend_on 'google-spreadsheet-ruby'
29
+ depend_on 'choice'
30
+ depend_on 'todonotes'
29
31
  }
30
32
 
31
33
  # EOF
data/bin/roo CHANGED
@@ -2,7 +2,32 @@
2
2
 
3
3
  require File.expand_path(
4
4
  File.join(File.dirname(__FILE__), %w[.. lib roo]))
5
+ require 'rubygems'
6
+ require 'choice'
5
7
 
6
- # Put your code here
7
- puts "the executable #{$0} does currently nothing"
8
+ Choice.options do
9
+ header ''
10
+ header 'Options:'
11
+ option :help do
12
+ long '--help'
13
+ desc 'Show this message'
14
+ end
15
+ option :version do
16
+ short '-v'
17
+ long '--version'
18
+ desc 'Show version'
19
+ action do
20
+ puts "Roo v#{Roo::VERSION}"
21
+ exit
22
+ end
23
+ end
24
+ option :info do
25
+ short '-i'
26
+ long '--info <spreadsheetfile>'
27
+ desc 'Show information about a spreadsheet file'
28
+ action do
29
+ puts '#'
30
+ end
31
+ end
32
+ end
8
33
  # EOF
data/datetime.csv ADDED
@@ -0,0 +1,7 @@
1
+ 1961-11-21,,
2
+ ,,
3
+ 1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00
4
+ 1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00
5
+ 1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00
6
+ 1961-11-21,1961-11-21,1961-11-21
7
+ 1961-11-21,1961-11-21,1961-11-21
data/lib/.roo.rb.swp ADDED
Binary file
data/lib/roo.rb CHANGED
@@ -3,7 +3,7 @@
3
3
  module Roo
4
4
 
5
5
  # :stopdoc:
6
- VERSION = '1.9.5'
6
+ VERSION = '1.9.6'
7
7
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
8
8
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
9
9
  # :startdoc:
Binary file
data/lib/roo/excel.rb CHANGED
@@ -100,7 +100,9 @@ class Excel < GenericSpreadsheet
100
100
  def initialize(filename, packed = nil, file_warning = :error)
101
101
  super()
102
102
  @file_warning = file_warning
103
- @tmpdir = "oo_"+$$.to_s
103
+ file_type_check(filename,'.xls','an Excel',packed)
104
+ # @tmpdir = "oo_"+$$.to_s
105
+ @tmpdir = GenericSpreadsheet.next_tmpdir
104
106
  @tmpdir = File.join(ENV['ROO_TMP'], @tmpdir) if ENV['ROO_TMP']
105
107
  unless File.exists?(@tmpdir)
106
108
  FileUtils::mkdir(@tmpdir)
@@ -108,15 +110,16 @@ class Excel < GenericSpreadsheet
108
110
  filename = open_from_uri(filename) if filename[0,7] == "http://"
109
111
  filename = open_from_stream(filename[7..-1]) if filename[0,7] == "stream:"
110
112
  filename = unzip(filename) if packed and packed == :zip
111
- begin
112
- begin
113
- file_type_check(filename,'.xls','an Excel')
114
- rescue TypeError
115
- FileUtils::rm_r @tmpdir
116
- raise
117
- end
113
+ #begin
114
+ #begin
115
+ # file_type_check(filename,'.xls','an Excel')
116
+ #rescue TypeError
117
+ # #FileUtils::rm_r @tmpdir
118
+ # raise
119
+ #end
118
120
  @filename = filename
119
121
  unless File.file?(@filename)
122
+ FileUtils::rm_r(@tmpdir)
120
123
  raise IOError, "file #{@filename} does not exist"
121
124
  end
122
125
  begin
@@ -126,18 +129,17 @@ class Excel < GenericSpreadsheet
126
129
  raise # nach aussen weiterhin sichtbar
127
130
  end
128
131
  @default_sheet = self.sheets.first
129
- ensure
132
+ #ensure
130
133
  #if ENV["roo_local"] != "thomas-p"
131
134
  # ich glaube ich darf hier noch nicht die temporaere
132
135
  # Datei loeschen, weil
133
136
  #to do
134
137
  #"Loeschen temp. Directory anpassen"
135
138
  #end
136
- #if fremdrechner?
137
- #FileUtils::rm_r(@tmpdir)
138
- #end
139
- #end
140
- end
139
+ #end
140
+ #if fremdrechner?
141
+ FileUtils::rm_r(@tmpdir)
142
+ #end
141
143
  @cell = Hash.new
142
144
  @cell_type = Hash.new
143
145
  @formula = Hash.new
data/lib/roo/excelx.rb CHANGED
@@ -87,18 +87,21 @@ class Excelx < GenericSpreadsheet
87
87
  def initialize(filename, packed=nil, file_warning = :error) #, create = false)
88
88
  super()
89
89
  @file_warning = file_warning
90
- @tmpdir = "oo_"+$$.to_s
90
+ file_type_check(filename,'.xlsx','an Excel-xlsx',packed)
91
+ #@tmpdir = "oo_"+$$.to_s
92
+ @tmpdir = GenericSpreadsheet.next_tmpdir
91
93
  @tmpdir = File.join(ENV['ROO_TMP'], @tmpdir) if ENV['ROO_TMP']
92
94
  unless File.exists?(@tmpdir)
93
95
  FileUtils::mkdir(@tmpdir)
94
96
  end
95
97
  filename = open_from_uri(filename) if filename[0,7] == "http://"
96
98
  filename = unzip(filename) if packed and packed == :zip
97
- begin
98
- file_type_check(filename,'.xlsx','an Excel-xlsx')
99
+ #begin
100
+ #file_type_check(filename,'.xlsx','an Excel-xlsx')
99
101
  @cells_read = Hash.new
100
102
  @filename = filename
101
103
  unless File.file?(@filename)
104
+ FileUtils::rm_r(@tmpdir)
102
105
  raise IOError, "file #{@filename} does not exist"
103
106
  end
104
107
  @@nr += 1
@@ -134,11 +137,12 @@ class Excelx < GenericSpreadsheet
134
137
  @sheet_doc[i] = Nokogiri::XML(file)
135
138
  file.close
136
139
  end
137
- ensure
140
+ #ensure
138
141
  #if ENV["roo_local"] != "thomas-p"
139
- FileUtils::rm_r(@tmpdir)
142
+ #FileUtils::rm_r(@tmpdir)
140
143
  #end
141
- end
144
+ #end
145
+ FileUtils::rm_r(@tmpdir)
142
146
  @default_sheet = self.sheets.first
143
147
  @cell = Hash.new
144
148
  @cell_type = Hash.new
@@ -6,6 +6,8 @@ class GenericSpreadsheet
6
6
 
7
7
  attr_reader :default_sheet
8
8
 
9
+ @@class_counter = 0
10
+
9
11
  # sets the line with attribute names (default: 1)
10
12
  attr_accessor :header_line
11
13
 
@@ -27,13 +29,22 @@ class GenericSpreadsheet
27
29
  ! eigener
28
30
  end
29
31
 
32
+ def self.next_tmpdir
33
+ @@class_counter += 1
34
+ # tmpdir = "oo_"+$$.to_s+"_"+sprintf("%04d",@@class_counter)
35
+ tmpdir = "oo_"+$$.to_s+"_"+sprintf("%010d",rand(10_000_000_000))
36
+ # p "@tmpdir = #{tmpdir}"; sleep 5
37
+ tmpdir
38
+ end
39
+
40
+
30
41
  public
31
42
 
32
43
  # sets the working sheet in the document
33
44
  # 'sheet' can be a number (1 = first sheet) or the name of a sheet.
34
45
  def default_sheet=(sheet)
35
46
  if sheet.kind_of? Fixnum
36
- if sheet >= 0 and sheet <= sheets.length
47
+ if sheet > 0 and sheet <= sheets.length
37
48
  sheet = self.sheets[sheet-1]
38
49
  else
39
50
  raise RangeError
@@ -444,12 +455,18 @@ class GenericSpreadsheet
444
455
 
445
456
  protected
446
457
 
447
- def file_type_check(filename, ext, name)
458
+ def file_type_check(filename, ext, name, packed=nil)
448
459
  new_expression = {
449
460
  '.ods' => 'Openoffice.new',
450
461
  '.xls' => 'Excel.new',
451
462
  '.xlsx' => 'Excelx.new',
452
463
  }
464
+ if packed == :zip
465
+ # lalala.ods.zip => lalala.ods
466
+ # hier wird KEIN unzip gemacht, sondern nur der Name der Datei
467
+ # getestet, falls es eine gepackte Datei ist.
468
+ filename = File.basename(filename,File.extname(filename))
469
+ end
453
470
  case ext
454
471
  when '.ods', '.xls', '.xlsx'
455
472
  correct_class = "use #{new_expression[ext]} to handle #{ext} spreadsheet files"
@@ -483,7 +500,7 @@ class GenericSpreadsheet
483
500
  [r,c]
484
501
  end
485
502
 
486
- # siehe: key_to_num
503
+ # see: key_to_num
487
504
  def key_to_string(arr)
488
505
  "#{arr[0]},#{arr[1]}"
489
506
  end
@@ -582,10 +599,10 @@ class GenericSpreadsheet
582
599
  ret=nil
583
600
  if zip.file.file? path
584
601
  # extract and return filename
585
- @tmpdir = "oo_"+$$.to_s
586
- unless File.exists?(@tmpdir)
587
- FileUtils::mkdir(@tmpdir)
588
- end
602
+ #2011-08-01 @tmpdir = "oo_"+$$.to_s
603
+ #2011-08-01 unless File.exists?(@tmpdir)
604
+ #2011-08-01 FileUtils::mkdir(@tmpdir)
605
+ #2011-08-01end
589
606
  file = File.open(File.join(@tmpdir, path),"wb")
590
607
  file.write(zip.read(path))
591
608
  file.close
@@ -601,6 +618,8 @@ class GenericSpreadsheet
601
618
  ret
602
619
  end
603
620
 
621
+ # Write all cells to the csv file. File can be a filename or nil. If the this
622
+ # parameter is nil the output goes to STDOUT
604
623
  def write_csv_content(file=nil,sheet=nil)
605
624
  file = STDOUT unless file
606
625
  if first_row(sheet) # sheet is not empty
@@ -617,20 +636,25 @@ class GenericSpreadsheet
617
636
  end
618
637
  end
619
638
 
620
- def one_cell_output(onecelltype,onecell,empty)
639
+ # The content of a cell in the csv output
640
+ def one_cell_output(onecelltype, onecell, empty)
621
641
  str = ""
622
642
  if empty
623
643
  str += ''
624
644
  else
625
645
  case onecelltype
626
646
  when :string
627
- if onecell == ""
628
- str << ''
629
- else
647
+ #if onecell == ""
648
+ # str << ''
649
+ #else
650
+ # one = onecell.gsub(/"/,'""')
651
+ # str << ('"'+one+'"')
652
+ #end
653
+ unless onecell.empty?
630
654
  one = onecell.gsub(/"/,'""')
631
655
  str << ('"'+one+'"')
632
- end
633
- when :float,:percentage
656
+ end
657
+ when :float, :percentage
634
658
  if onecell == onecell.to_i
635
659
  str << onecell.to_i.to_s
636
660
  else
@@ -638,12 +662,16 @@ class GenericSpreadsheet
638
662
  end
639
663
  when :formula
640
664
  if onecell.class == String
641
- if onecell == ""
642
- str << ''
643
- else
665
+ # if onecell == ""
666
+ # str << ''
667
+ # else
668
+ # one = onecell.gsub(/"/,'""')
669
+ # str << '"'+one+'"'
670
+ # end
671
+ unless onecell.empty?
644
672
  one = onecell.gsub(/"/,'""')
645
673
  str << '"'+one+'"'
646
- end
674
+ end
647
675
  elsif onecell.class == Float
648
676
  if onecell == onecell.to_i
649
677
  str << onecell.to_i.to_s
@@ -657,6 +685,11 @@ class GenericSpreadsheet
657
685
  str << onecell.to_s
658
686
  when :time
659
687
  str << GenericSpreadsheet.integer_to_timestring(onecell)
688
+ when :datetime
689
+ # date,rest = onecell.to_s.split('T')
690
+ # time = rest.split('+').first
691
+ # str << date + ' ' + time
692
+ str << onecell.to_s
660
693
  else
661
694
  raise "unhandled celltype "+onecelltype.to_s
662
695
  end
@@ -15,7 +15,8 @@ class Openoffice < GenericSpreadsheet
15
15
  def initialize(filename, packed=nil, file_warning=:error, tmpdir=nil) #, create = false)
16
16
  @file_warning = file_warning
17
17
  super()
18
- @tmpdir = "oo_"+$$.to_s
18
+ file_type_check(filename,'.ods','an openoffice', packed)
19
+ @tmpdir = GenericSpreadsheet.next_tmpdir
19
20
  @tmpdir = File.join(ENV['ROO_TMP'], @tmpdir) if ENV['ROO_TMP']
20
21
  @tmpdir = File.join(tmpdir, @tmpdir) if tmpdir
21
22
  unless File.exists?(@tmpdir)
@@ -23,33 +24,25 @@ class Openoffice < GenericSpreadsheet
23
24
  end
24
25
  filename = open_from_uri(filename) if filename[0,7] == "http://"
25
26
  filename = unzip(filename) if packed and packed == :zip
26
- begin
27
- begin
28
- file_type_check(filename,'.ods','an openoffice')
29
- rescue TypeError
30
- FileUtils::rm_r @tmpdir
31
- raise
32
- end
33
- #if create and ! File.exists?(filename)
34
- # self.create_openoffice(filename)
35
- #end
36
- @cells_read = Hash.new
37
- #TODO: @cells_read[:default] = false
38
- @filename = filename
39
- unless File.file?(@filename)
40
- raise IOError, "file #{@filename} does not exist"
41
- end
42
- @@nr += 1
43
- @file_nr = @@nr
44
- extract_content
45
- file = File.new(File.join(@tmpdir, @file_nr.to_s+"_roo_content.xml"))
46
- @doc = Nokogiri::XML(file)
47
- file.close
48
- ensure
49
- unless Dir.glob(@tmpdir).empty?
27
+ #if create and ! File.exists?(filename)
28
+ # self.create_openoffice(filename)
29
+ #end
30
+ @cells_read = Hash.new
31
+ #TODO: @cells_read[:default] = false
32
+ @filename = filename
33
+ unless File.file?(@filename)
50
34
  FileUtils::rm_r(@tmpdir)
51
- end
35
+ raise IOError, "file #{@filename} does not exist"
52
36
  end
37
+ @@nr += 1
38
+ @file_nr = @@nr
39
+ extract_content
40
+ file = File.new(File.join(@tmpdir, @file_nr.to_s+"_roo_content.xml"))
41
+ @doc = Nokogiri::XML(file)
42
+ file.close
43
+ #unless Dir.glob(@tmpdir).empty?
44
+ FileUtils::rm_r(@tmpdir)
45
+ #end
53
46
  @default_sheet = self.sheets.first
54
47
  @cell = Hash.new
55
48
  @cell_type = Hash.new
@@ -501,3 +494,7 @@ class Openoffice < GenericSpreadsheet
501
494
  end
502
495
 
503
496
  end # class
497
+
498
+ # Libreoffice is just an alias for Openoffice class
499
+ class Libreoffice < Openoffice
500
+ end
@@ -0,0 +1,7 @@
1
+ 1961-11-21,,
2
+ ,,
3
+ 1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00
4
+ 1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00
5
+ 1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00,1961-11-21T12:17:18+00:00
6
+ 1961-11-21,1961-11-21,1961-11-21
7
+ 1961-11-21,1961-11-21,1961-11-21
data/test/test_roo.rb CHANGED
@@ -9,6 +9,8 @@
9
9
  # (like 'diff') must be changed (or commented out ;-)) if you want to run
10
10
  # the tests under another OS
11
11
  #
12
+ require 'rubygems'
13
+ require 'todonotes'
12
14
  require 'tmpdir'
13
15
  require './lib/roo'
14
16
  #TODO
@@ -32,7 +34,7 @@ $log = Logger.new(File.join(ENV['HOME'],"roo.log"))
32
34
  #$log.level = Logger::WARN
33
35
  $log.level = Logger::DEBUG
34
36
 
35
- DISPLAY_LOG = true
37
+ DISPLAY_LOG = false
36
38
  DB_LOG = false
37
39
  if DB_LOG
38
40
  require 'activerecord'
@@ -134,6 +136,13 @@ class Test::Unit::TestCase
134
136
  :duration => t2-t1
135
137
  )
136
138
  end
139
+ if Dir.glob("oo_*") != []
140
+ puts "nicht alle temp. Dateien geloescht"
141
+ puts Dir.glob("oo_*")
142
+ print "? "
143
+ STDOUT.flush
144
+ a = gets
145
+ end
137
146
  end
138
147
  end
139
148
 
@@ -158,6 +167,7 @@ class TestRoo < Test::Unit::TestCase
158
167
  EXCEL = true # do Excel Tests? (.xls files)
159
168
  GOOGLE = false # do Google-Spreadsheet Tests?
160
169
  EXCELX = true # do Excelx Tests? (.xlsx files)
170
+ LIBREOFFICE = true # do Libreoffice tests? (.ods files)
161
171
 
162
172
  ONLINE = false
163
173
  LONG_RUN = false
@@ -182,7 +192,7 @@ class TestRoo < Test::Unit::TestCase
182
192
  options[:format] = [options[:format]]
183
193
  end
184
194
  options[:format].each do |formatname|
185
- unless [:openoffice,:excel,:excelx,:google].include?(formatname)
195
+ unless [:openoffice,:excel,:excelx,:google,:libreoffice].include?(formatname)
186
196
  raise "invalid spreadsheet type #{formatname}"
187
197
  end
188
198
  end
@@ -194,6 +204,7 @@ class TestRoo < Test::Unit::TestCase
194
204
  yield Roo::Spreadsheet.open(File.join(TESTDIR, options[:name] + '.xlsx')) if EXCELX && options[:format].include?(:excelx)
195
205
  yield Roo::Spreadsheet.open(File.join(TESTDIR, options[:name] + '.ods')) if OPENOFFICE && options[:format].include?(:openoffice)
196
206
  yield Roo::Spreadsheet.open(key_of(options[:name]) || options[:name]) if GOOGLE && options[:format].include?(:google)
207
+ yield Roo::Spreadsheet.open(File.join(TESTDIR, options[:name] + '.ods')) if LIBREOFFICE && options[:format].include?(:libreoffice)
197
208
  end
198
209
  # Using Date.strptime so check that it's using the method
199
210
  # with the value set in date_format
@@ -317,6 +328,14 @@ class TestRoo < Test::Unit::TestCase
317
328
  end
318
329
  end
319
330
 
331
+ def test_libre_office
332
+ if LIBREOFFICE
333
+ oo = Libreoffice.new("test/numbers1.ods")
334
+ oo.default_sheet = oo.sheets.first
335
+ assert_equal 41, oo.cell('a',12)
336
+ end
337
+ end
338
+
320
339
  #TODO: inkonsequente Lieferung Fixnum/Float
321
340
  def test_rows
322
341
  with_each_spreadsheet(:name=>'numbers1') do |oo|
@@ -721,6 +740,13 @@ class TestRoo < Test::Unit::TestCase
721
740
  end
722
741
 
723
742
  def test_excel_zipped
743
+ after Date.new(2011,8,30) do
744
+ to do
745
+ 'hier wieder das Problem, dass ausgepacktes xls File
746
+ unter Windows nicht geloescht werden kann, weil
747
+ das spreadsheet gem die Datei nicht schliesst.
748
+ Fehler von spreadsheet gem'
749
+ end
724
750
  if EXCEL
725
751
  begin
726
752
  oo = Excel.new(File.join(TESTDIR,"bode-v1.xls.zip"), :zip)
@@ -728,6 +754,7 @@ class TestRoo < Test::Unit::TestCase
728
754
  assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
729
755
  end
730
756
  end
757
+ end
731
758
  end
732
759
 
733
760
  def test_openoffice_zipped
@@ -1406,21 +1433,33 @@ Sheet 3:
1406
1433
  end
1407
1434
 
1408
1435
  def test_no_remaining_tmp_files_openoffice
1436
+ after Date.new(2011,8,30) do
1437
+ # alles noch mal ueberarbeiten
1438
+ # temp. Directories sollten in diesem Fall ueberhaupt nicht
1439
+ # angelegt werden
1409
1440
  if OPENOFFICE
1410
- prev = Dir.glob(TMP_PREFIX)
1411
1441
  assert_raise(Zip::ZipError) { #TODO: besseres Fehlerkriterium bei
1412
1442
  # oo = Openoffice.new(File.join(TESTDIR,"no_spreadsheet_file.txt"))
1413
1443
  # es soll absichtlich ein Abbruch provoziert werden, deshalb :ignore
1444
+ begin
1414
1445
  oo = Openoffice.new(File.join(TESTDIR,"no_spreadsheet_file.txt"),
1415
1446
  false,
1416
1447
  :ignore)
1448
+ rescue Zip::ZipError
1449
+ @tmp = Dir.glob(oo.tmpdir)
1450
+ raise
1451
+ end
1417
1452
  }
1418
- now = Dir.glob(TMP_PREFIX)
1419
- assert (now-prev).empty?, "temporay directory was not deleted"
1453
+ assert @tmp.empty?, "temporay directory was not deleted"
1420
1454
  end
1455
+ end
1421
1456
  end
1422
1457
 
1423
1458
  def test_no_remaining_tmp_files_excel
1459
+ after Date.new(2011,8,30) do
1460
+ # alles noch mal ueberarbeiten
1461
+ # temp. Directories sollten in diesem Fall ueberhaupt nicht
1462
+ # angelegt werden
1424
1463
  if EXCEL
1425
1464
  prev = Dir.glob(TMP_PREFIX)
1426
1465
  assert_raise(Ole::Storage::FormatError) {
@@ -1431,9 +1470,14 @@ Sheet 3:
1431
1470
  now = Dir.glob(TMP_PREFIX)
1432
1471
  assert (now-prev).empty?, "temporary directory not removed"
1433
1472
  end
1473
+ end
1434
1474
  end
1435
1475
 
1436
1476
  def test_no_remaining_tmp_files_excelx
1477
+ after Date.new(2011,8,30) do
1478
+ # alles noch mal ueberarbeiten
1479
+ # temp. Directories sollten in diesem Fall ueberhaupt nicht
1480
+ # angelegt werden
1437
1481
  if EXCELX
1438
1482
  prev = Dir.glob(TMP_PREFIX)
1439
1483
  assert_raise(Zip::ZipError) { #TODO: besseres Fehlerkriterium bei
@@ -1448,6 +1492,7 @@ Sheet 3:
1448
1492
  now = Dir.glob(TMP_PREFIX)
1449
1493
  assert (now-prev).empty?
1450
1494
  end
1495
+ end
1451
1496
  end
1452
1497
 
1453
1498
  def test_no_remaining_tmp_files_google
@@ -1529,7 +1574,6 @@ Sheet 3:
1529
1574
  end
1530
1575
 
1531
1576
  def test_file_warning_default
1532
- after Date.new(2011,7,18) do
1533
1577
  if OPENOFFICE
1534
1578
  prev = Dir.glob(TMP_PREFIX)
1535
1579
  assert_raises(TypeError, "test/numbers1.xls is not an openoffice spreadsheet") { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xls")) }
@@ -1551,37 +1595,46 @@ Sheet 3:
1551
1595
  now = Dir.glob(TMP_PREFIX)
1552
1596
  assert (now-prev).empty?
1553
1597
  end
1554
- end
1555
1598
  end
1556
1599
 
1557
1600
  def test_file_warning_error
1558
- after Date.new(2011,7,22) do
1559
1601
  if OPENOFFICE
1560
- prev = Dir.glob(TMP_PREFIX)
1602
+ prev = Dir.glob(TMP_PREFIX)
1561
1603
  assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xls"),false,:error) }
1604
+ now = Dir.glob(TMP_PREFIX)
1605
+ assert (now-prev).empty?
1606
+
1607
+ prev = Dir.glob(TMP_PREFIX)
1562
1608
  assert_raises(TypeError) { oo = Openoffice.new(File.join(TESTDIR,"numbers1.xlsx"),false,:error) }
1563
- now = Dir.glob(TMP_PREFIX)
1609
+ now = Dir.glob(TMP_PREFIX)
1564
1610
  assert (now-prev).empty?
1565
1611
  end
1566
1612
  if EXCEL
1567
- prev = Dir.glob(TMP_PREFIX)
1613
+ prev = Dir.glob(TMP_PREFIX)
1568
1614
  assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.ods"),false,:error) }
1615
+ now = Dir.glob(TMP_PREFIX)
1616
+ assert (now-prev).empty?, "temporary directory was not deleted"
1617
+
1618
+ prev = Dir.glob(TMP_PREFIX)
1569
1619
  assert_raises(TypeError) { oo = Excel.new(File.join(TESTDIR,"numbers1.xlsx"),false,:error) }
1570
- now = Dir.glob(TMP_PREFIX)
1620
+ now = Dir.glob(TMP_PREFIX)
1571
1621
  assert (now-prev).empty?, "temporary directory was not deleted"
1572
1622
  end
1573
1623
  if EXCELX
1574
- prev = Dir.glob(TMP_PREFIX)
1624
+ prev = Dir.glob(TMP_PREFIX)
1575
1625
  assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.ods"),false,:error) }
1626
+ now = Dir.glob(TMP_PREFIX)
1627
+ assert (now-prev).empty?, "temporary directory was not deleted"
1628
+
1629
+ prev = Dir.glob(TMP_PREFIX)
1576
1630
  assert_raises(TypeError) { oo = Excelx.new(File.join(TESTDIR,"numbers1.xls"),false,:error) }
1577
- now = Dir.glob(TMP_PREFIX)
1631
+ now = Dir.glob(TMP_PREFIX)
1578
1632
  assert (now-prev).empty?, "temporary directory was not deleted"
1579
1633
  end
1580
- end
1581
1634
  end
1582
1635
 
1583
1636
  def test_file_warning_warning
1584
- after Date.new(2011,7,22) do
1637
+ after Date.new(2011,9,2) do
1585
1638
  if OPENOFFICE
1586
1639
  assert_nothing_raised(TypeError) {
1587
1640
  assert_raises(Zip::ZipError) {
@@ -1627,7 +1680,6 @@ Sheet 3:
1627
1680
  end
1628
1681
 
1629
1682
  def test_file_warning_ignore
1630
- after Date.new(2011,7,22) do
1631
1683
  if OPENOFFICE
1632
1684
  # Files, die eigentlich Openoffice-
1633
1685
  # Files sind, aber die falsche Endung haben.
@@ -1694,7 +1746,6 @@ Sheet 3:
1694
1746
  assert Dir.glob(TMP_PREFIX).empty?
1695
1747
  end
1696
1748
  =end
1697
- end
1698
1749
  end
1699
1750
 
1700
1751
  def test_bug_last_row_excel
@@ -2053,17 +2104,15 @@ Sheet 3:
2053
2104
 
2054
2105
 
2055
2106
  def test_bug_excel_last_row_255
2056
- if LONG_RUN
2057
- local_only do
2058
- after Date.new(2011,6,17) do
2059
- oo = Excel.new(File.join('..','confidential','ScienceStaff.xls'))
2060
- oo.default_sheet = oo.sheets.first
2061
- assert_equal "COMSCI", oo.cell(255,1)
2062
- assert_equal "lala", oo.cell(256,1)
2063
- assert_equal 1537, oo.last_row
2064
- end
2107
+ if LONG_RUN
2108
+ local_only do
2109
+ oo = Excel.new(File.join('..','confidential','ScienceStaff.xls'))
2110
+ oo.default_sheet = oo.sheets.first
2111
+ assert_equal "COMSCI", oo.cell(255,1)
2112
+ assert_equal "lala", oo.cell(256,1)
2113
+ assert_equal 1537, oo.last_row
2065
2114
  end
2066
- end
2115
+ end
2067
2116
  end
2068
2117
 
2069
2118
  def test_bug_excel_last_row_255_modified
@@ -2115,7 +2164,7 @@ Sheet 3:
2115
2164
  end end
2116
2165
 
2117
2166
  def test_bug_date_mileszs
2118
- after Date.new(2011,7,17) do
2167
+ after Date.new(2011,8,28) do
2119
2168
  # to do
2120
2169
  # "An richtige Stelle kopieren. Ist das Dokument vertraulich?"
2121
2170
  # 'ist auf dem Netbook nicht vorhanden'
@@ -2175,12 +2224,12 @@ where the expected result is
2175
2224
  end
2176
2225
 
2177
2226
  def test_bug_guest_list_2011_05_05
2178
- after Date.new(2011,7,17) do
2227
+ after Date.new(2011,8,28) do
2179
2228
  oo = Excel.new(File.join("..","confidential","guest_list_addresses.xls"))
2180
2229
  oo.default_sheet = oo.sheets.first
2181
2230
  assert_equal "lalala", oo.cell('a',1) # anderer Inhalt im Spreadsheet
2182
2231
  assert_equal :string, oo.celltype('a',1)
2183
- end
2232
+ end
2184
2233
  end
2185
2234
 
2186
2235
  def test_bug_guest_list_2011_05_05_spreadsheet
@@ -2209,7 +2258,7 @@ where the expected result is
2209
2258
  end
2210
2259
 
2211
2260
  def test_bug_string_as_a_date_2011_05_21_spreadsheet_only
2212
- after Date.new(2011,7,24) do
2261
+ after Date.new(2011,8,28) do
2213
2262
  # to do
2214
2263
  # 'wieder entfernen'
2215
2264
  # end
@@ -2223,11 +2272,11 @@ where the expected result is
2223
2272
  end
2224
2273
 
2225
2274
  end
2226
- end
2275
+ end
2227
2276
  end
2228
2277
 
2229
2278
  def test_bug_string_as_a_date_2011_05_21
2230
- after Date.new(2011,7,22) do
2279
+ after Date.new(2011,8,28) do
2231
2280
  #oo = Excel.new(File.join(TESTDIR,'2011-05-21_sample_type_problem.xls'))
2232
2281
  oo = Excel.new(File.join('..','confidential','2011-05-21_sample_type_problem.xls'))
2233
2282
  oo.default_sheet = oo.sheets.first
@@ -2237,7 +2286,7 @@ where the expected result is
2237
2286
  assert_equal 76, oo.g5
2238
2287
  assert_equal 77, oo.g6
2239
2288
  assert_equal 78, oo.g7
2240
- end
2289
+ end
2241
2290
  end
2242
2291
 
2243
2292
  def test_bug_string_as_a_date_2011_05_21_saved_as_ods
@@ -2294,4 +2343,12 @@ where the expected result is
2294
2343
  end
2295
2344
  end
2296
2345
 
2346
+ # 2011-08-03
2347
+ def test_bug_datetime_to_csv
2348
+ with_each_spreadsheet(:name=>'datetime') do |oo|
2349
+ assert oo.to_csv("datetime.csv")
2350
+ assert File.exists?("datetime.csv")
2351
+ assert_equal "", `diff test/so_datetime.csv datetime.csv`
2352
+ end
2353
+ end
2297
2354
  end # class
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.5
4
+ version: 1.9.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-06-25 00:00:00.000000000 +02:00
13
- default_executable:
12
+ date: 2011-08-03 00:00:00.000000000Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: spreadsheet
17
- requirement: &21941208 !ruby/object:Gem::Requirement
16
+ requirement: &25564452 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>'
@@ -22,21 +21,21 @@ dependencies:
22
21
  version: 0.6.4
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *21941208
24
+ version_requirements: *25564452
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: nokogiri
28
- requirement: &21940668 !ruby/object:Gem::Requirement
27
+ requirement: &25564128 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
32
31
  - !ruby/object:Gem::Version
33
- version: 1.4.6
32
+ version: 1.5.0
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *21940668
35
+ version_requirements: *25564128
37
36
  - !ruby/object:Gem::Dependency
38
37
  name: google-spreadsheet-ruby
39
- requirement: &21939756 !ruby/object:Gem::Requirement
38
+ requirement: &25563816 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
41
  - - ! '>='
@@ -44,10 +43,32 @@ dependencies:
44
43
  version: 0.1.5
45
44
  type: :runtime
46
45
  prerelease: false
47
- version_requirements: *21939756
46
+ version_requirements: *25563816
47
+ - !ruby/object:Gem::Dependency
48
+ name: choice
49
+ requirement: &25563468 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.4
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *25563468
58
+ - !ruby/object:Gem::Dependency
59
+ name: todonotes
60
+ requirement: &25563144 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 0.1.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *25563144
48
69
  - !ruby/object:Gem::Dependency
49
70
  name: bones
50
- requirement: &21938784 !ruby/object:Gem::Requirement
71
+ requirement: &25562808 !ruby/object:Gem::Requirement
51
72
  none: false
52
73
  requirements:
53
74
  - - ! '>='
@@ -55,7 +76,7 @@ dependencies:
55
76
  version: 3.7.0
56
77
  type: :development
57
78
  prerelease: false
58
- version_requirements: *21938784
79
+ version_requirements: *25562808
59
80
  description: ! 'Roo can access the contents of various spreadsheet files. It can handle
60
81
 
61
82
  * Openoffice
@@ -75,7 +96,8 @@ extra_rdoc_files:
75
96
  - PostInstall.txt
76
97
  - README.txt
77
98
  - bin/roo
78
- - lib/roo/.generic_spreadsheet.rb.rb.swp
99
+ - lib/.roo.rb.swp
100
+ - lib/roo/.generic_spreadsheet.rb.swp
79
101
  - test/no_spreadsheet_file.txt
80
102
  files:
81
103
  - History.txt
@@ -87,8 +109,10 @@ files:
87
109
  - a.xls
88
110
  - bin/roo
89
111
  - csv8532
112
+ - datetime.csv
113
+ - lib/.roo.rb.swp
90
114
  - lib/roo.rb
91
- - lib/roo/.generic_spreadsheet.rb.rb.swp
115
+ - lib/roo/.generic_spreadsheet.rb.swp
92
116
  - lib/roo/excel.rb
93
117
  - lib/roo/excelx.rb
94
118
  - lib/roo/generic_spreadsheet.rb
@@ -149,6 +173,7 @@ files:
149
173
  - test/simple_spreadsheet.xlsx
150
174
  - test/simple_spreadsheet_from_italo.ods
151
175
  - test/simple_spreadsheet_from_italo.xls
176
+ - test/so_datetime.csv
152
177
  - test/style.ods
153
178
  - test/style.xls
154
179
  - test/style.xlsx
@@ -168,7 +193,6 @@ files:
168
193
  - test/whitespace.xls
169
194
  - test/whitespace.xlsx
170
195
  - tmp.xls
171
- has_rdoc: true
172
196
  homepage: http://roo.rubyforge.org/
173
197
  licenses: []
174
198
  post_install_message:
@@ -191,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
191
215
  version: '0'
192
216
  requirements: []
193
217
  rubyforge_project: roo
194
- rubygems_version: 1.5.2
218
+ rubygems_version: 1.8.6
195
219
  signing_key:
196
220
  specification_version: 3
197
221
  summary: Roo can access the contents of various spreadsheet files.
Binary file