roo 1.13.2 → 2.7.0

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.
Files changed (216) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +17 -0
  3. data/.github/ISSUE_TEMPLATE +10 -0
  4. data/.gitignore +11 -0
  5. data/.simplecov +4 -0
  6. data/.travis.yml +17 -0
  7. data/CHANGELOG.md +626 -0
  8. data/Gemfile +17 -12
  9. data/Gemfile_ruby2 +30 -0
  10. data/Guardfile +23 -0
  11. data/LICENSE +3 -1
  12. data/README.md +285 -0
  13. data/Rakefile +23 -23
  14. data/examples/roo_soap_client.rb +28 -31
  15. data/examples/roo_soap_server.rb +4 -6
  16. data/examples/write_me.rb +9 -10
  17. data/lib/roo/base.rb +298 -495
  18. data/lib/roo/constants.rb +5 -0
  19. data/lib/roo/csv.rb +127 -113
  20. data/lib/roo/errors.rb +11 -0
  21. data/lib/roo/excelx/cell/base.rb +94 -0
  22. data/lib/roo/excelx/cell/boolean.rb +27 -0
  23. data/lib/roo/excelx/cell/date.rb +28 -0
  24. data/lib/roo/excelx/cell/datetime.rb +111 -0
  25. data/lib/roo/excelx/cell/empty.rb +19 -0
  26. data/lib/roo/excelx/cell/number.rb +87 -0
  27. data/lib/roo/excelx/cell/string.rb +19 -0
  28. data/lib/roo/excelx/cell/time.rb +43 -0
  29. data/lib/roo/excelx/cell.rb +106 -0
  30. data/lib/roo/excelx/comments.rb +55 -0
  31. data/lib/roo/excelx/coordinate.rb +12 -0
  32. data/lib/roo/excelx/extractor.rb +21 -0
  33. data/lib/roo/excelx/format.rb +64 -0
  34. data/lib/roo/excelx/relationships.rb +25 -0
  35. data/lib/roo/excelx/shared.rb +32 -0
  36. data/lib/roo/excelx/shared_strings.rb +157 -0
  37. data/lib/roo/excelx/sheet.rb +112 -0
  38. data/lib/roo/excelx/sheet_doc.rb +211 -0
  39. data/lib/roo/excelx/styles.rb +64 -0
  40. data/lib/roo/excelx/workbook.rb +59 -0
  41. data/lib/roo/excelx.rb +376 -602
  42. data/lib/roo/font.rb +17 -0
  43. data/lib/roo/formatters/base.rb +15 -0
  44. data/lib/roo/formatters/csv.rb +84 -0
  45. data/lib/roo/formatters/matrix.rb +23 -0
  46. data/lib/roo/formatters/xml.rb +31 -0
  47. data/lib/roo/formatters/yaml.rb +40 -0
  48. data/lib/roo/libre_office.rb +4 -0
  49. data/lib/roo/link.rb +34 -0
  50. data/lib/roo/open_office.rb +626 -0
  51. data/lib/roo/spreadsheet.rb +22 -23
  52. data/lib/roo/tempdir.rb +21 -0
  53. data/lib/roo/utils.rb +78 -0
  54. data/lib/roo/version.rb +3 -0
  55. data/lib/roo.rb +23 -24
  56. data/roo.gemspec +21 -204
  57. data/spec/helpers.rb +5 -0
  58. data/spec/lib/roo/base_spec.rb +229 -3
  59. data/spec/lib/roo/csv_spec.rb +38 -11
  60. data/spec/lib/roo/excelx/format_spec.rb +7 -6
  61. data/spec/lib/roo/excelx_spec.rb +510 -11
  62. data/spec/lib/roo/libreoffice_spec.rb +16 -6
  63. data/spec/lib/roo/openoffice_spec.rb +30 -8
  64. data/spec/lib/roo/spreadsheet_spec.rb +60 -12
  65. data/spec/lib/roo/utils_spec.rb +106 -0
  66. data/spec/spec_helper.rb +7 -6
  67. data/test/all_ss.rb +12 -11
  68. data/test/excelx/cell/test_base.rb +63 -0
  69. data/test/excelx/cell/test_boolean.rb +36 -0
  70. data/test/excelx/cell/test_date.rb +38 -0
  71. data/test/excelx/cell/test_datetime.rb +45 -0
  72. data/test/excelx/cell/test_empty.rb +7 -0
  73. data/test/excelx/cell/test_number.rb +74 -0
  74. data/test/excelx/cell/test_string.rb +28 -0
  75. data/test/excelx/cell/test_time.rb +30 -0
  76. data/test/formatters/test_csv.rb +119 -0
  77. data/test/formatters/test_matrix.rb +76 -0
  78. data/test/formatters/test_xml.rb +74 -0
  79. data/test/formatters/test_yaml.rb +20 -0
  80. data/test/roo/test_csv.rb +52 -0
  81. data/test/roo/test_excelx.rb +186 -0
  82. data/test/roo/test_libre_office.rb +9 -0
  83. data/test/roo/test_open_office.rb +126 -0
  84. data/test/test_helper.rb +73 -53
  85. data/test/test_roo.rb +1211 -2292
  86. metadata +119 -298
  87. data/CHANGELOG +0 -417
  88. data/Gemfile.lock +0 -78
  89. data/README.markdown +0 -126
  90. data/VERSION +0 -1
  91. data/lib/roo/excel.rb +0 -355
  92. data/lib/roo/excel2003xml.rb +0 -300
  93. data/lib/roo/google.rb +0 -292
  94. data/lib/roo/openoffice.rb +0 -496
  95. data/lib/roo/roo_rails_helper.rb +0 -83
  96. data/lib/roo/worksheet.rb +0 -18
  97. data/scripts/txt2html +0 -67
  98. data/spec/lib/roo/excel2003xml_spec.rb +0 -15
  99. data/spec/lib/roo/excel_spec.rb +0 -17
  100. data/spec/lib/roo/google_spec.rb +0 -64
  101. data/test/files/1900_base.xls +0 -0
  102. data/test/files/1900_base.xlsx +0 -0
  103. data/test/files/1904_base.xls +0 -0
  104. data/test/files/1904_base.xlsx +0 -0
  105. data/test/files/Bibelbund.csv +0 -3741
  106. data/test/files/Bibelbund.ods +0 -0
  107. data/test/files/Bibelbund.xls +0 -0
  108. data/test/files/Bibelbund.xlsx +0 -0
  109. data/test/files/Bibelbund.xml +0 -62518
  110. data/test/files/Bibelbund1.ods +0 -0
  111. data/test/files/Pfand_from_windows_phone.xlsx +0 -0
  112. data/test/files/bad_excel_date.xls +0 -0
  113. data/test/files/bbu.ods +0 -0
  114. data/test/files/bbu.xls +0 -0
  115. data/test/files/bbu.xlsx +0 -0
  116. data/test/files/bbu.xml +0 -152
  117. data/test/files/bode-v1.ods.zip +0 -0
  118. data/test/files/bode-v1.xls.zip +0 -0
  119. data/test/files/boolean.csv +0 -2
  120. data/test/files/boolean.ods +0 -0
  121. data/test/files/boolean.xls +0 -0
  122. data/test/files/boolean.xlsx +0 -0
  123. data/test/files/boolean.xml +0 -112
  124. data/test/files/borders.ods +0 -0
  125. data/test/files/borders.xls +0 -0
  126. data/test/files/borders.xlsx +0 -0
  127. data/test/files/borders.xml +0 -144
  128. data/test/files/bug-numbered-sheet-names.xlsx +0 -0
  129. data/test/files/bug-row-column-fixnum-float.xls +0 -0
  130. data/test/files/bug-row-column-fixnum-float.xml +0 -127
  131. data/test/files/comments.ods +0 -0
  132. data/test/files/comments.xls +0 -0
  133. data/test/files/comments.xlsx +0 -0
  134. data/test/files/csvtypes.csv +0 -1
  135. data/test/files/datetime.ods +0 -0
  136. data/test/files/datetime.xls +0 -0
  137. data/test/files/datetime.xlsx +0 -0
  138. data/test/files/datetime.xml +0 -142
  139. data/test/files/datetime_floatconv.xls +0 -0
  140. data/test/files/datetime_floatconv.xml +0 -148
  141. data/test/files/dreimalvier.ods +0 -0
  142. data/test/files/emptysheets.ods +0 -0
  143. data/test/files/emptysheets.xls +0 -0
  144. data/test/files/emptysheets.xlsx +0 -0
  145. data/test/files/emptysheets.xml +0 -105
  146. data/test/files/excel2003.xml +0 -21140
  147. data/test/files/false_encoding.xls +0 -0
  148. data/test/files/false_encoding.xml +0 -132
  149. data/test/files/file_item_error.xlsx +0 -0
  150. data/test/files/formula.ods +0 -0
  151. data/test/files/formula.xls +0 -0
  152. data/test/files/formula.xlsx +0 -0
  153. data/test/files/formula.xml +0 -134
  154. data/test/files/formula_parse_error.xls +0 -0
  155. data/test/files/formula_parse_error.xml +0 -1833
  156. data/test/files/formula_string_error.xlsx +0 -0
  157. data/test/files/html-escape.ods +0 -0
  158. data/test/files/link.xls +0 -0
  159. data/test/files/link.xlsx +0 -0
  160. data/test/files/matrix.ods +0 -0
  161. data/test/files/matrix.xls +0 -0
  162. data/test/files/named_cells.ods +0 -0
  163. data/test/files/named_cells.xls +0 -0
  164. data/test/files/named_cells.xlsx +0 -0
  165. data/test/files/no_spreadsheet_file.txt +0 -1
  166. data/test/files/numbers1.csv +0 -18
  167. data/test/files/numbers1.ods +0 -0
  168. data/test/files/numbers1.xls +0 -0
  169. data/test/files/numbers1.xlsx +0 -0
  170. data/test/files/numbers1.xml +0 -312
  171. data/test/files/numeric-link.xlsx +0 -0
  172. data/test/files/only_one_sheet.ods +0 -0
  173. data/test/files/only_one_sheet.xls +0 -0
  174. data/test/files/only_one_sheet.xlsx +0 -0
  175. data/test/files/only_one_sheet.xml +0 -67
  176. data/test/files/paragraph.ods +0 -0
  177. data/test/files/paragraph.xls +0 -0
  178. data/test/files/paragraph.xlsx +0 -0
  179. data/test/files/paragraph.xml +0 -127
  180. data/test/files/prova.xls +0 -0
  181. data/test/files/ric.ods +0 -0
  182. data/test/files/simple_spreadsheet.ods +0 -0
  183. data/test/files/simple_spreadsheet.xls +0 -0
  184. data/test/files/simple_spreadsheet.xlsx +0 -0
  185. data/test/files/simple_spreadsheet.xml +0 -225
  186. data/test/files/simple_spreadsheet_from_italo.ods +0 -0
  187. data/test/files/simple_spreadsheet_from_italo.xls +0 -0
  188. data/test/files/simple_spreadsheet_from_italo.xml +0 -242
  189. data/test/files/so_datetime.csv +0 -7
  190. data/test/files/style.ods +0 -0
  191. data/test/files/style.xls +0 -0
  192. data/test/files/style.xlsx +0 -0
  193. data/test/files/style.xml +0 -154
  194. data/test/files/time-test.csv +0 -2
  195. data/test/files/time-test.ods +0 -0
  196. data/test/files/time-test.xls +0 -0
  197. data/test/files/time-test.xlsx +0 -0
  198. data/test/files/time-test.xml +0 -131
  199. data/test/files/type_excel.ods +0 -0
  200. data/test/files/type_excel.xlsx +0 -0
  201. data/test/files/type_excelx.ods +0 -0
  202. data/test/files/type_excelx.xls +0 -0
  203. data/test/files/type_openoffice.xls +0 -0
  204. data/test/files/type_openoffice.xlsx +0 -0
  205. data/test/files/whitespace.ods +0 -0
  206. data/test/files/whitespace.xls +0 -0
  207. data/test/files/whitespace.xlsx +0 -0
  208. data/test/files/whitespace.xml +0 -184
  209. data/test/rm_sub_test.rb +0 -12
  210. data/test/rm_test.rb +0 -7
  211. data/test/test_generic_spreadsheet.rb +0 -259
  212. data/website/index.html +0 -385
  213. data/website/index.txt +0 -423
  214. data/website/javascripts/rounded_corners_lite.inc.js +0 -285
  215. data/website/stylesheets/screen.css +0 -130
  216. data/website/template.rhtml +0 -48
data/test/test_helper.rb CHANGED
@@ -1,29 +1,21 @@
1
+ # encoding: utf-8
2
+ require 'simplecov'
1
3
  # require deps
2
4
  require 'tmpdir'
3
5
  require 'fileutils'
4
- require 'test/unit'
6
+ require 'minitest/autorun'
5
7
  require 'shoulda'
6
- require 'fileutils'
7
8
  require 'timeout'
8
9
  require 'logger'
9
10
  require 'date'
10
- require 'webmock/test_unit'
11
11
 
12
12
  # require gem files
13
- require File.dirname(__FILE__) + '/../lib/roo'
14
-
15
- TESTDIR = File.join(File.dirname(__FILE__), 'files')
16
-
17
- LOG_DIR = File.join(File.dirname(__FILE__),'../log')
18
- FileUtils.mkdir_p(LOG_DIR)
19
-
20
- LOG_FILE = File.join(LOG_DIR,'roo_test.log')
21
- $log = Logger.new(LOG_FILE)
22
-
23
- #$log.level = Logger::WARN
24
- $log.level = Logger::DEBUG
13
+ require 'roo'
14
+ require "minitest/reporters"
15
+ Minitest::Reporters.use!([Minitest::Reporters::DefaultReporter.new,
16
+ Minitest::Reporters::SpecReporter.new]) unless defined? JRUBY_VERSION
25
17
 
26
- DISPLAY_LOG = false
18
+ TESTDIR = File.join(File.dirname(__FILE__), 'files')
27
19
 
28
20
  # very simple diff implementation
29
21
  # output is an empty string if the files are equal
@@ -47,7 +39,7 @@ def file_diff(fn1,fn2)
47
39
  if f2.eof? == false
48
40
  while f2.eof? == false
49
41
  line2 = f2.gets
50
- result ">#{line2}\n"
42
+ result << ">#{line2}\n"
51
43
  end
52
44
  end
53
45
  end
@@ -63,43 +55,71 @@ class File
63
55
  end
64
56
  end
65
57
 
66
- class Test::Unit::TestCase
67
- def key_of(spreadsheetname)
68
- {
69
- #'formula' => 'rt4Pw1WmjxFtyfrqqy94wPw',
70
- 'formula' => 'o10837434939102457526.3022866619437760118',
71
- #"write.me" => 'r6m7HFlUOwst0RTUTuhQ0Ow',
72
- "write.me" => '0AkCuGANLc3jFcHR1NmJiYWhOWnBZME4wUnJ4UWJXZHc',
73
- #'numbers1' => "rYraCzjxTtkxw1NxHJgDU8Q",
74
- 'numbers1' => 'o10837434939102457526.4784396906364855777',
75
- #'borders' => "r_nLYMft6uWg_PT9Rc2urXw",
76
- 'borders' => "o10837434939102457526.664868920231926255",
77
- #'simple_spreadsheet' => "r3aMMCBCA153TmU_wyIaxfw",
78
- 'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
79
- 'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
80
- #"only_one_sheet" => "rqRtkcPJ97nhQ0m9ksDw2rA",
81
- "only_one_sheet" => "o10837434939102457526.762705759906130135",
82
- #'time-test' => 'r2XfDBJMrLPjmuLrPQQrEYw',
83
- 'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
84
- #'datetime' => "r2kQpXWr6xOSUpw9MyXavYg",
85
- 'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
86
- 'whitespace' => "rZyQaoFebVGeHKzjG6e9gRQ",
87
- 'matrix' => '0AkCuGANLc3jFdHY3cWtYUkM4bVdadjZ5VGpfTzFEUEE',
88
- # 'numbers1' => "o10837434939102457526.4784396906364855777",
89
- # 'borders' => "o10837434939102457526.664868920231926255",
90
- # 'simple_spreadsheet' => "ptu6bbahNZpYe-L1vEBmgGA",
91
- # 'testnichtvorhandenBibelbund.ods' => "invalidkeyforanyspreadsheet", # !!! intentionally false key
92
- # "only_one_sheet" => "o10837434939102457526.762705759906130135",
93
- # "write.me" => 'ptu6bbahNZpY0N0RrxQbWdw&hl',
94
- # 'formula' => 'o10837434939102457526.3022866619437760118',
95
- # 'time-test' => 'ptu6bbahNZpYBMhk01UfXSg',
96
- # 'datetime' => "ptu6bbahNZpYQEtZwzL_dZQ",
97
- }.fetch(spreadsheetname)
98
- rescue KeyError
99
- raise "unknown spreadsheetname: #{spreadsheetname}"
58
+ def local_server(port)
59
+ raise ArgumentError unless port.to_i > 0
60
+ "http://0.0.0.0:#{port}"
61
+ end
62
+
63
+ def start_local_server(filename, port = nil)
64
+ require "rack"
65
+ content_type = filename.split(".").last
66
+ port ||= TEST_RACK_PORT
67
+
68
+ web_server = Proc.new do |env|
69
+ [
70
+ "200",
71
+ { "Content-Type" => content_type },
72
+ [File.read("#{TESTDIR}/#{filename}")]
73
+ ]
74
+ end
75
+
76
+ t = Thread.new { Rack::Handler::WEBrick.run web_server, Host: '0.0.0.0', Port: port , Logger: WEBrick::BasicLog.new(nil,1) }
77
+ # give the app a chance to startup
78
+ sleep(0.2)
79
+
80
+ yield
81
+ ensure
82
+ t.kill
83
+ end
84
+
85
+ ROO_FORMATS = [
86
+ :excelx,
87
+ :excelxm,
88
+ :openoffice,
89
+ :libreoffice
90
+ ]
91
+
92
+ # call a block of code for each spreadsheet type
93
+ # and yield a reference to the roo object
94
+ def with_each_spreadsheet(options)
95
+ if options[:format]
96
+ formats = Array(options[:format])
97
+ invalid_formats = formats - ROO_FORMATS
98
+ unless invalid_formats.empty?
99
+ raise "invalid spreadsheet types: #{invalid_formats.join(', ')}"
100
+ end
101
+ else
102
+ formats = ROO_FORMATS
103
+ end
104
+ formats.each do |format|
105
+ begin
106
+ yield Roo::Spreadsheet.open(File.join(TESTDIR,
107
+ fixture_filename(options[:name], format)))
108
+ rescue => e
109
+ raise e, "#{e.message} for #{format}", e.backtrace unless options[:ignore_errors]
110
+ end
100
111
  end
112
+ end
101
113
 
102
- def yaml_entry(row,col,type,value)
103
- "cell_#{row}_#{col}: \n row: #{row} \n col: #{col} \n celltype: #{type} \n value: #{value} \n"
114
+ def fixture_filename(name, format)
115
+ case format
116
+ when :excelx
117
+ "#{name}.xlsx"
118
+ when :excelxm
119
+ "#{name}.xlsm"
120
+ when :openoffice, :libreoffice
121
+ "#{name}.ods"
122
+ else
123
+ raise ArgumentError, "unexpected format #{format}"
104
124
  end
105
125
  end