Skip to content

Commit 926513f

Browse files
Felix Bummaravindm
Felix Bumm
authored andcommitted
return missing headers when raising HeaderRowNotFoundError (roo-rb#461)
return missing headers when raising HeaderRowNotFoundError
1 parent 79729c1 commit 926513f

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

lib/roo/base.rb

+8-4
Original file line numberDiff line numberDiff line change
@@ -308,18 +308,22 @@ def parse(options = {})
308308

309309
def row_with(query, return_headers = false)
310310
line_no = 0
311+
closest_mismatched_headers = []
311312
each do |row|
312313
line_no += 1
313314
headers = query.map { |q| row.grep(q)[0] }.compact
314-
315315
if headers.length == query.length
316316
@header_line = line_no
317317
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
320323
end
321324
end
322-
raise Roo::HeaderRowNotFoundError
325+
missing_headers = query.select { |q| closest_mismatched_headers.grep(q).empty? }
326+
raise Roo::HeaderRowNotFoundError, missing_headers
323327
end
324328

325329
protected

spec/lib/roo/base_spec.rb

+5
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,11 @@ def sheets
158158
expect { spreadsheet.row_with([/Missing Header/]) }.to \
159159
raise_error(Roo::HeaderRowNotFoundError)
160160
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
161166
end
162167
end
163168

0 commit comments

Comments
 (0)