File tree 2 files changed +13
-4
lines changed
2 files changed +13
-4
lines changed Original file line number Diff line number Diff line change @@ -308,18 +308,22 @@ def parse(options = {})
308
308
309
309
def row_with ( query , return_headers = false )
310
310
line_no = 0
311
+ closest_mismatched_headers = [ ]
311
312
each do |row |
312
313
line_no += 1
313
314
headers = query . map { |q | row . grep ( q ) [ 0 ] } . compact
314
-
315
315
if headers . length == query . length
316
316
@header_line = line_no
317
317
return return_headers ? headers : line_no
318
- elsif line_no > 100
319
- raise Roo ::HeaderRowNotFoundError
318
+ else
319
+ closest_mismatched_headers = headers if headers . length > closest_mismatched_headers . length
320
+ if line_no > 100
321
+ break
322
+ end
320
323
end
321
324
end
322
- raise Roo ::HeaderRowNotFoundError
325
+ missing_headers = query . select { |q | closest_mismatched_headers . grep ( q ) . empty? }
326
+ raise Roo ::HeaderRowNotFoundError , missing_headers
323
327
end
324
328
325
329
protected
Original file line number Diff line number Diff line change @@ -158,6 +158,11 @@ def sheets
158
158
expect { spreadsheet . row_with ( [ /Missing Header/ ] ) } . to \
159
159
raise_error ( Roo ::HeaderRowNotFoundError )
160
160
end
161
+
162
+ it 'returns missing headers' do
163
+ expect { spreadsheet . row_with ( [ /Header/ , /Missing Header 1/ , /Missing Header 2/ ] ) } . to \
164
+ raise_error ( Roo ::HeaderRowNotFoundError , '[/Missing Header 1/, /Missing Header 2/]' )
165
+ end
161
166
end
162
167
end
163
168
You can’t perform that action at this time.
0 commit comments