simple_xlsx_reader 0.9.4 → 0.9.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,17 @@
1
+ ### 0.9.5
2
+
3
+ * Fix inlineStr support (broken by formula support commit)
4
+
5
+ ### 0.9.4
6
+
7
+ * Formula support. Formulas used to cause things to blow up, now they don't!
8
+ * Support number types styled as dates. Previously, the type was honored
9
+ above the style, which is incorrect for dates; date-numbers now parse as
10
+ dates.
11
+ * Error-free parsing of empty sheets
12
+ * Fix custom styles w/ numFmtId == 164. Custom style types are delineated
13
+ starting *at* numFmtId 164, not greater than 164.
14
+
1
15
  ### 0.9.3
2
16
 
3
17
  * Support 1.8.7 (tests pass). Ongoing support will depend on ease.
@@ -133,8 +133,11 @@ module SimpleXlsxReader
133
133
  style = xcell.attributes['s'] &&
134
134
  style_types[xcell.attributes['s'].value.to_i]
135
135
 
136
+ xvalue = type == 'inlineStr' ?
137
+ xcell.at_xpath('xmlns:is/xmlns:t') : xcell.at_xpath('xmlns:v')
138
+
136
139
  cells << begin
137
- self.class.cast(xcell.at_xpath('xmlns:v').text.strip, type, style, :shared_strings => shared_strings)
140
+ self.class.cast(xvalue.text.strip, type, style, :shared_strings => shared_strings)
138
141
  rescue => e
139
142
  if !SimpleXlsxReader.configuration.catch_cell_load_errors
140
143
  error = CellLoadError.new(
@@ -1,3 +1,3 @@
1
1
  module SimpleXlsxReader
2
- VERSION = "0.9.4"
2
+ VERSION = "0.9.5"
3
3
  end
@@ -33,8 +33,8 @@ describe SimpleXlsxReader do
33
33
  end
34
34
 
35
35
  it 'reads type inlineStr as a string' do
36
- xml = Nokogiri::XML(%( <c t="inlineStr"><is><t>the value</t></is></c> ))
37
- described_class.cast(xml.text, nil, 'inlineStr').must_equal 'the value'
36
+ described_class.cast('the value', nil, 'inlineStr').
37
+ must_equal 'the value'
38
38
  end
39
39
 
40
40
  it 'reads date styles' do
@@ -154,6 +154,7 @@ describe SimpleXlsxReader do
154
154
  XML
155
155
  )
156
156
  end
157
+
157
158
  let(:xml) do
158
159
  SimpleXlsxReader::Document::Xml.new.tap do |xml|
159
160
  xml.sheets = [sheet]
@@ -217,14 +218,14 @@ describe SimpleXlsxReader do
217
218
  end
218
219
  end
219
220
 
220
- it 'raises if configuration.raise_on_parse_error' do
221
+ it 'raises if configuration.catch_cell_load_errors' do
221
222
  SimpleXlsxReader.configuration.catch_cell_load_errors = false
222
223
 
223
224
  lambda { described_class.new(xml).parse_sheet('test', xml.sheets.first) }.
224
225
  must_raise(SimpleXlsxReader::CellLoadError)
225
226
  end
226
227
 
227
- it 'records a load error if not configuration.raise_on_parse_error' do
228
+ it 'records a load error if not configuration.catch_cell_load_errors' do
228
229
  SimpleXlsxReader.configuration.catch_cell_load_errors = true
229
230
 
230
231
  sheet = described_class.new(xml).parse_sheet('test', xml.sheets.first)
@@ -232,24 +233,30 @@ describe SimpleXlsxReader do
232
233
  end
233
234
  end
234
235
 
235
- describe 'empty "Generic" cells' do
236
+ describe 'parsing types' do
236
237
  let(:xml) do
237
238
  SimpleXlsxReader::Document::Xml.new.tap do |xml|
238
239
  xml.sheets = [Nokogiri::XML(
239
240
  <<-XML
240
- <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
241
- <dimension ref="A1:C1" />
242
- <sheetData>
243
- <row>
244
- <c r='A1' s='0'>
245
- <v>Cell A</v>
246
- </c>
247
- <c r='C1' s='0'>
248
- <v>Cell C</v>
249
- </c>
250
- </row>
251
- </sheetData>
252
- </worksheet>
241
+ <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
242
+ <dimension ref="A1:C1" />
243
+ <sheetData>
244
+ <row>
245
+ <c r='A1' s='0'>
246
+ <v>Cell A1</v>
247
+ </c>
248
+ <c r='C1' s='1'>
249
+ <v>2.4</v>
250
+ </c>
251
+ <c r='D1' s='14'>
252
+ <v>01-06-84</v>
253
+ </c>
254
+ <c r='E1' t='inlineStr' s='0'>
255
+ <is><t>Cell E1</t></is>
256
+ </c>
257
+ </row>
258
+ </sheetData>
259
+ </worksheet>
253
260
  XML
254
261
  )]
255
262
 
@@ -257,19 +264,44 @@ describe SimpleXlsxReader do
257
264
  # which is in this case 'General' type
258
265
  xml.styles = Nokogiri::XML(
259
266
  <<-XML
260
- <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
261
- <cellXfs count="1">
262
- <xf numFmtId="0" />
263
- </cellXfs>
264
- </styleSheet>
267
+ <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
268
+ <cellXfs count="1">
269
+ <xf numFmtId="0" />
270
+ <xf numFmtId="2" />
271
+ <xf numFmtId="14" />
272
+ </cellXfs>
273
+ </styleSheet>
265
274
  XML
266
275
  )
267
276
  end
268
- end
269
277
 
270
- it 'get parsed as nil' do
271
- described_class.new(xml).parse_sheet('test', xml.sheets.first).
272
- rows.must_equal [['Cell A', nil, 'Cell C']]
278
+ before do
279
+ @rows = described_class.new(xml).parse_sheet('test', xml.sheets.first).rows
280
+ end
281
+
282
+ it "reads 'Generic' cells as strings" do
283
+ @rows[0].must_equal "Cell A1"
284
+ end
285
+
286
+ it "reads empty 'Generic' cells as nil" do
287
+ @rows[1].must_equal nil
288
+ end
289
+
290
+ # We could expand on these type tests, but really just a couple
291
+ # demonstrate that it's wired together. Type-specific tests should go
292
+ # on #cast
293
+
294
+ it "reads floats" do
295
+ @rows[2].must_equal 2.4
296
+ end
297
+
298
+ it "reads dates" do
299
+ @rows[3].must_equal Date.parse('Jan 6, 1984')
300
+ end
301
+
302
+ it "reads strings formatted as inlineStr" do
303
+ @rows[4].must_equal 'Cell E1'
304
+ end
273
305
  end
274
306
  end
275
307
  end
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: simple_xlsx_reader
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.9.4
5
+ version: 0.9.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Woody Peterson
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-28 00:00:00.000000000 Z
12
+ date: 2013-05-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri