roo 2.0.1 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +17 -0
  3. data/.github/ISSUE_TEMPLATE +10 -0
  4. data/.gitignore +4 -0
  5. data/.travis.yml +10 -6
  6. data/CHANGELOG.md +116 -1
  7. data/Gemfile +3 -4
  8. data/Gemfile_ruby2 +30 -0
  9. data/Guardfile +1 -2
  10. data/README.md +56 -22
  11. data/Rakefile +1 -1
  12. data/lib/roo/base.rb +108 -245
  13. data/lib/roo/constants.rb +5 -0
  14. data/lib/roo/csv.rb +94 -87
  15. data/lib/roo/errors.rb +11 -0
  16. data/lib/roo/excelx/cell/base.rb +94 -0
  17. data/lib/roo/excelx/cell/boolean.rb +27 -0
  18. data/lib/roo/excelx/cell/date.rb +28 -0
  19. data/lib/roo/excelx/cell/datetime.rb +111 -0
  20. data/lib/roo/excelx/cell/empty.rb +19 -0
  21. data/lib/roo/excelx/cell/number.rb +87 -0
  22. data/lib/roo/excelx/cell/string.rb +19 -0
  23. data/lib/roo/excelx/cell/time.rb +43 -0
  24. data/lib/roo/excelx/cell.rb +33 -4
  25. data/lib/roo/excelx/comments.rb +33 -0
  26. data/lib/roo/excelx/coordinate.rb +12 -0
  27. data/lib/roo/excelx/extractor.rb +3 -4
  28. data/lib/roo/excelx/format.rb +64 -0
  29. data/lib/roo/excelx/shared.rb +32 -0
  30. data/lib/roo/excelx/shared_strings.rb +124 -4
  31. data/lib/roo/excelx/sheet.rb +12 -7
  32. data/lib/roo/excelx/sheet_doc.rb +108 -97
  33. data/lib/roo/excelx/styles.rb +1 -1
  34. data/lib/roo/excelx.rb +61 -103
  35. data/lib/roo/formatters/base.rb +15 -0
  36. data/lib/roo/formatters/csv.rb +84 -0
  37. data/lib/roo/formatters/matrix.rb +23 -0
  38. data/lib/roo/formatters/xml.rb +31 -0
  39. data/lib/roo/formatters/yaml.rb +40 -0
  40. data/lib/roo/libre_office.rb +1 -2
  41. data/lib/roo/link.rb +21 -2
  42. data/lib/roo/open_office.rb +468 -523
  43. data/lib/roo/spreadsheet.rb +3 -1
  44. data/lib/roo/tempdir.rb +21 -0
  45. data/lib/roo/utils.rb +7 -7
  46. data/lib/roo/version.rb +1 -1
  47. data/lib/roo.rb +8 -3
  48. data/roo.gemspec +2 -1
  49. data/spec/helpers.rb +5 -0
  50. data/spec/lib/roo/base_spec.rb +229 -0
  51. data/spec/lib/roo/csv_spec.rb +19 -0
  52. data/spec/lib/roo/excelx_spec.rb +97 -11
  53. data/spec/lib/roo/openoffice_spec.rb +18 -1
  54. data/spec/lib/roo/spreadsheet_spec.rb +20 -0
  55. data/spec/lib/roo/utils_spec.rb +1 -1
  56. data/spec/spec_helper.rb +5 -5
  57. data/test/all_ss.rb +12 -11
  58. data/test/excelx/cell/test_base.rb +63 -0
  59. data/test/excelx/cell/test_boolean.rb +36 -0
  60. data/test/excelx/cell/test_date.rb +38 -0
  61. data/test/excelx/cell/test_datetime.rb +45 -0
  62. data/test/excelx/cell/test_empty.rb +7 -0
  63. data/test/excelx/cell/test_number.rb +74 -0
  64. data/test/excelx/cell/test_string.rb +28 -0
  65. data/test/excelx/cell/test_time.rb +30 -0
  66. data/test/formatters/test_csv.rb +119 -0
  67. data/test/formatters/test_matrix.rb +76 -0
  68. data/test/formatters/test_xml.rb +78 -0
  69. data/test/formatters/test_yaml.rb +20 -0
  70. data/test/helpers/test_accessing_files.rb +60 -0
  71. data/test/helpers/test_comments.rb +43 -0
  72. data/test/helpers/test_formulas.rb +9 -0
  73. data/test/helpers/test_labels.rb +103 -0
  74. data/test/helpers/test_sheets.rb +55 -0
  75. data/test/helpers/test_styles.rb +62 -0
  76. data/test/roo/test_base.rb +182 -0
  77. data/test/roo/test_csv.rb +60 -0
  78. data/test/roo/test_excelx.rb +325 -0
  79. data/test/roo/test_libre_office.rb +9 -0
  80. data/test/roo/test_open_office.rb +289 -0
  81. data/test/test_helper.rb +116 -18
  82. data/test/test_roo.rb +362 -2088
  83. metadata +70 -4
  84. data/test/test_generic_spreadsheet.rb +0 -237
metadata CHANGED
@@ -1,17 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Preymesser
8
8
  - Hugh McGowan
9
9
  - Ben Woosley
10
10
  - Oleksandr Simonov
11
+ - Steven Daniels
11
12
  autorequire:
12
13
  bindir: bin
13
14
  cert_chain: []
14
- date: 2015-06-01 00:00:00.000000000 Z
15
+ date: 2017-01-04 00:00:00.000000000 Z
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
17
18
  name: nokogiri
@@ -81,6 +82,26 @@ dependencies:
81
82
  - - ">="
82
83
  - !ruby/object:Gem::Version
83
84
  version: 5.4.3
85
+ - !ruby/object:Gem::Dependency
86
+ name: rack
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: '1.6'
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: 2.0.0
95
+ type: :development
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '1.6'
102
+ - - "<"
103
+ - !ruby/object:Gem::Version
104
+ version: 2.0.0
84
105
  description: |-
85
106
  Roo can access the contents of various spreadsheet files. It can handle
86
107
  * OpenOffice
@@ -94,11 +115,14 @@ executables: []
94
115
  extensions: []
95
116
  extra_rdoc_files: []
96
117
  files:
118
+ - ".codeclimate.yml"
119
+ - ".github/ISSUE_TEMPLATE"
97
120
  - ".gitignore"
98
121
  - ".simplecov"
99
122
  - ".travis.yml"
100
123
  - CHANGELOG.md
101
124
  - Gemfile
125
+ - Gemfile_ruby2
102
126
  - Guardfile
103
127
  - LICENSE
104
128
  - README.md
@@ -108,28 +132,48 @@ files:
108
132
  - examples/write_me.rb
109
133
  - lib/roo.rb
110
134
  - lib/roo/base.rb
135
+ - lib/roo/constants.rb
111
136
  - lib/roo/csv.rb
137
+ - lib/roo/errors.rb
112
138
  - lib/roo/excelx.rb
113
139
  - lib/roo/excelx/cell.rb
140
+ - lib/roo/excelx/cell/base.rb
141
+ - lib/roo/excelx/cell/boolean.rb
142
+ - lib/roo/excelx/cell/date.rb
143
+ - lib/roo/excelx/cell/datetime.rb
144
+ - lib/roo/excelx/cell/empty.rb
145
+ - lib/roo/excelx/cell/number.rb
146
+ - lib/roo/excelx/cell/string.rb
147
+ - lib/roo/excelx/cell/time.rb
114
148
  - lib/roo/excelx/comments.rb
149
+ - lib/roo/excelx/coordinate.rb
115
150
  - lib/roo/excelx/extractor.rb
151
+ - lib/roo/excelx/format.rb
116
152
  - lib/roo/excelx/relationships.rb
153
+ - lib/roo/excelx/shared.rb
117
154
  - lib/roo/excelx/shared_strings.rb
118
155
  - lib/roo/excelx/sheet.rb
119
156
  - lib/roo/excelx/sheet_doc.rb
120
157
  - lib/roo/excelx/styles.rb
121
158
  - lib/roo/excelx/workbook.rb
122
159
  - lib/roo/font.rb
160
+ - lib/roo/formatters/base.rb
161
+ - lib/roo/formatters/csv.rb
162
+ - lib/roo/formatters/matrix.rb
163
+ - lib/roo/formatters/xml.rb
164
+ - lib/roo/formatters/yaml.rb
123
165
  - lib/roo/libre_office.rb
124
166
  - lib/roo/link.rb
125
167
  - lib/roo/open_office.rb
126
168
  - lib/roo/spreadsheet.rb
169
+ - lib/roo/tempdir.rb
127
170
  - lib/roo/utils.rb
128
171
  - lib/roo/version.rb
129
172
  - roo.gemspec
130
173
  - spec/fixtures/vcr_cassettes/google_drive.yml
131
174
  - spec/fixtures/vcr_cassettes/google_drive_access_token.yml
132
175
  - spec/fixtures/vcr_cassettes/google_drive_set.yml
176
+ - spec/helpers.rb
133
177
  - spec/lib/roo/base_spec.rb
134
178
  - spec/lib/roo/csv_spec.rb
135
179
  - spec/lib/roo/excelx/format_spec.rb
@@ -140,7 +184,29 @@ files:
140
184
  - spec/lib/roo/utils_spec.rb
141
185
  - spec/spec_helper.rb
142
186
  - test/all_ss.rb
143
- - test/test_generic_spreadsheet.rb
187
+ - test/excelx/cell/test_base.rb
188
+ - test/excelx/cell/test_boolean.rb
189
+ - test/excelx/cell/test_date.rb
190
+ - test/excelx/cell/test_datetime.rb
191
+ - test/excelx/cell/test_empty.rb
192
+ - test/excelx/cell/test_number.rb
193
+ - test/excelx/cell/test_string.rb
194
+ - test/excelx/cell/test_time.rb
195
+ - test/formatters/test_csv.rb
196
+ - test/formatters/test_matrix.rb
197
+ - test/formatters/test_xml.rb
198
+ - test/formatters/test_yaml.rb
199
+ - test/helpers/test_accessing_files.rb
200
+ - test/helpers/test_comments.rb
201
+ - test/helpers/test_formulas.rb
202
+ - test/helpers/test_labels.rb
203
+ - test/helpers/test_sheets.rb
204
+ - test/helpers/test_styles.rb
205
+ - test/roo/test_base.rb
206
+ - test/roo/test_csv.rb
207
+ - test/roo/test_excelx.rb
208
+ - test/roo/test_libre_office.rb
209
+ - test/roo/test_open_office.rb
144
210
  - test/test_helper.rb
145
211
  - test/test_roo.rb
146
212
  homepage: http://github.com/roo-rb/roo
@@ -163,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
229
  version: '0'
164
230
  requirements: []
165
231
  rubyforge_project:
166
- rubygems_version: 2.4.5
232
+ rubygems_version: 2.5.1
167
233
  signing_key:
168
234
  specification_version: 4
169
235
  summary: Roo can access the contents of various spreadsheet files.
@@ -1,237 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.dirname(__FILE__) + '/test_helper'
3
-
4
- class TestBase < Minitest::Test
5
- def setup
6
- @klass = Class.new(Roo::Base) do
7
- def initialize(filename = 'some_file')
8
- super
9
- @filename = filename
10
- end
11
-
12
- def read_cells(sheet = nil)
13
- @cells_read[sheet] = true
14
- end
15
-
16
- def cell(row, col, sheet = nil)
17
- sheet ||= default_sheet
18
- @cell[sheet][[row, col]]
19
- end
20
-
21
- def celltype(row, col, sheet = nil)
22
- sheet ||= default_sheet
23
- @cell_type[sheet][[row, col]]
24
- end
25
-
26
- def sheets
27
- ['my_sheet', 'blank sheet']
28
- end
29
- end
30
- @oo = @klass.new
31
- setup_test_sheet(@oo)
32
- end
33
-
34
- context 'private method Roo::Base.uri?(filename)' do
35
- should 'return true when passed a filename starts with http(s)://' do
36
- assert_equal true, @oo.send(:uri?, 'http://example.com/')
37
- assert_equal true, @oo.send(:uri?, 'https://example.com/')
38
- end
39
-
40
- should 'return false when passed a filename which does not start with http(s)://' do
41
- assert_equal false, @oo.send(:uri?, 'example.com')
42
- end
43
-
44
- should 'return false when passed non-String object such as Tempfile' do
45
- assert_equal false, @oo.send(:uri?, Tempfile.new('test'))
46
- end
47
- end
48
-
49
- def test_setting_invalid_type_does_not_update_cell
50
- @oo.set(1, 1, 1)
51
- assert_raises(ArgumentError) { @oo.set(1, 1, :invalid_type) }
52
- assert_equal 1, @oo.cell(1, 1)
53
- assert_equal :float, @oo.celltype(1, 1)
54
- end
55
-
56
- def test_first_row
57
- assert_equal 5, @oo.first_row
58
- end
59
-
60
- def test_last_row
61
- assert_equal 16, @oo.last_row
62
- end
63
-
64
- def test_first_column
65
- assert_equal 1, @oo.first_column
66
- end
67
-
68
- def test_first_column_as_letter
69
- assert_equal 'A', @oo.first_column_as_letter
70
- end
71
-
72
- def test_last_column
73
- assert_equal 7, @oo.last_column
74
- end
75
-
76
- def test_last_column_as_letter
77
- assert_equal 'G', @oo.last_column_as_letter
78
- end
79
-
80
- def test_rows
81
- assert_equal [41.0, 42.0, 43.0, 44.0, 45.0, nil, nil], @oo.row(12)
82
- assert_equal [nil, '"Hello world!"', 'dreiundvierzig', 'vierundvierzig', 'fuenfundvierzig', nil, nil], @oo.row(16)
83
- end
84
-
85
- def test_empty_eh
86
- assert @oo.empty?(1, 1)
87
- assert !@oo.empty?(8, 3)
88
- assert @oo.empty?('A', 11)
89
- assert !@oo.empty?('A', 12)
90
- end
91
-
92
- def test_reload
93
- @oo.reload
94
- assert @oo.instance_variable_get(:@cell).empty?
95
- end
96
-
97
- def test_each
98
- oo_each = @oo.each
99
- assert_instance_of Enumerator, oo_each
100
- assert_equal [nil, '"Hello world!"', 'dreiundvierzig', 'vierundvierzig', 'fuenfundvierzig', nil, nil], oo_each.to_a.last
101
- end
102
-
103
- def test_to_yaml
104
- assert_equal "--- \n" + yaml_entry(5, 1, 'date', '1961-11-21'), @oo.to_yaml({}, 5, 1, 5, 1)
105
- assert_equal "--- \n" + yaml_entry(8, 3, 'string', 'thisisc8'), @oo.to_yaml({}, 8, 3, 8, 3)
106
- assert_equal "--- \n" + yaml_entry(12, 3, 'float', 43.0), @oo.to_yaml({}, 12, 3, 12, 3)
107
- assert_equal \
108
- "--- \n" + yaml_entry(12, 3, 'float', 43.0) +
109
- yaml_entry(12, 4, 'float', 44.0) +
110
- yaml_entry(12, 5, 'float', 45.0), @oo.to_yaml({}, 12, 3, 12)
111
- assert_equal \
112
- "--- \n" + yaml_entry(12, 3, 'float', 43.0) +
113
- yaml_entry(12, 4, 'float', 44.0) +
114
- yaml_entry(12, 5, 'float', 45.0) +
115
- yaml_entry(15, 3, 'float', 43.0) +
116
- yaml_entry(15, 4, 'float', 44.0) +
117
- yaml_entry(15, 5, 'float', 45.0) +
118
- yaml_entry(16, 3, 'string', 'dreiundvierzig') +
119
- yaml_entry(16, 4, 'string', 'vierundvierzig') +
120
- yaml_entry(16, 5, 'string', 'fuenfundvierzig'), @oo.to_yaml({}, 12, 3)
121
- end
122
-
123
- def test_to_csv
124
- assert_equal expected_csv, @oo.to_csv
125
- end
126
-
127
- def test_to_csv_with_separator
128
- assert_equal expected_csv_with_semicolons, @oo.to_csv(nil, ';')
129
- end
130
-
131
- protected
132
-
133
- def setup_test_sheet(workbook = nil)
134
- workbook ||= @oo
135
- set_sheet_values(workbook)
136
- set_sheet_types(workbook)
137
- set_cells_read(workbook)
138
- end
139
-
140
- def set_sheet_values(workbook)
141
- workbook.instance_variable_get(:@cell)[workbook.default_sheet] = {
142
- [5, 1] => Date.civil(1961, 11, 21).to_s,
143
-
144
- [8, 3] => 'thisisc8',
145
- [8, 7] => 'thisisg8',
146
-
147
- [12, 1] => 41.0,
148
- [12, 2] => 42.0,
149
- [12, 3] => 43.0,
150
- [12, 4] => 44.0,
151
- [12, 5] => 45.0,
152
-
153
- [15, 3] => 43.0,
154
- [15, 4] => 44.0,
155
- [15, 5] => 45.0,
156
-
157
- [16, 2] => '"Hello world!"',
158
- [16, 3] => 'dreiundvierzig',
159
- [16, 4] => 'vierundvierzig',
160
- [16, 5] => 'fuenfundvierzig'
161
- }
162
- end
163
-
164
- def set_sheet_types(workbook)
165
- workbook.instance_variable_get(:@cell_type)[workbook.default_sheet] = {
166
- [5, 1] => :date,
167
-
168
- [8, 3] => :string,
169
- [8, 7] => :string,
170
-
171
- [12, 1] => :float,
172
- [12, 2] => :float,
173
- [12, 3] => :float,
174
- [12, 4] => :float,
175
- [12, 5] => :float,
176
-
177
- [15, 3] => :float,
178
- [15, 4] => :float,
179
- [15, 5] => :float,
180
-
181
- [16, 2] => :string,
182
- [16, 3] => :string,
183
- [16, 4] => :string,
184
- [16, 5] => :string
185
- }
186
- end
187
-
188
- def set_first_row(workbook)
189
- row_hash = workbook.instance_variable_get(:@first_row)
190
- row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[0] }.min
191
- end
192
-
193
- def set_last_row(workbook)
194
- row_hash = workbook.instance_variable_get(:@last_row)
195
- row_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[0] }.max
196
- end
197
-
198
- def set_first_col(workbook)
199
- col_hash = workbook.instance_variable_get(:@first_column)
200
- col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[1] }.min
201
- end
202
-
203
- def set_last_col(workbook)
204
- col_hash = workbook.instance_variable_get(:@last_column)
205
- col_hash[workbook.default_sheet] = workbook.instance_variable_get(:@cell)[workbook.default_sheet].map { |k, _v| k[1] }.max
206
- end
207
-
208
- def set_cells_read(workbook)
209
- read_hash = workbook.instance_variable_get(:@cells_read)
210
- read_hash[workbook.default_sheet] = true
211
- end
212
-
213
- def expected_csv
214
- <<EOS
215
- ,,,,,,
216
- ,,,,,,
217
- ,,,,,,
218
- ,,,,,,
219
- 1961-11-21,,,,,,
220
- ,,,,,,
221
- ,,,,,,
222
- ,,"thisisc8",,,,"thisisg8"
223
- ,,,,,,
224
- ,,,,,,
225
- ,,,,,,
226
- 41,42,43,44,45,,
227
- ,,,,,,
228
- ,,,,,,
229
- ,,43,44,45,,
230
- ,"""Hello world!""","dreiundvierzig","vierundvierzig","fuenfundvierzig",,
231
- EOS
232
- end
233
-
234
- def expected_csv_with_semicolons
235
- expected_csv.gsub(/\,/, ';')
236
- end
237
- end