Skip to content

Commit 327cf31

Browse files
authored
Reset headers each time when creating the enumerator. (#98)
This fixes headers being messed up when #simple_rows is called multiple times.
1 parent f29af88 commit 327cf31

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

lib/creek/sheet.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def rows_generator include_meta_data=false, use_simple_rows_format=false
9292
opener = Nokogiri::XML::Reader::TYPE_ELEMENT
9393
closer = Nokogiri::XML::Reader::TYPE_END_ELEMENT
9494
Enumerator.new do |y|
95+
@headers = nil
9596
row, cells, cell = nil, {}, nil
9697
cell_type = nil
9798
cell_style_idx = nil
@@ -104,7 +105,7 @@ def rows_generator include_meta_data=false, use_simple_rows_format=false
104105
y << (include_meta_data ? row : cells) if node.self_closing?
105106
elsif node.name == 'row' && node.node_type == closer
106107
processed_cells = fill_in_empty_cells(cells, row['r'], cell, use_simple_rows_format)
107-
@headers = processed_cells if row['r'] == HEADERS_ROW_NUMBER
108+
@headers = processed_cells if with_headers && row['r'] == HEADERS_ROW_NUMBER
108109

109110
if @images_present
110111
processed_cells.each do |cell_name, cell_value|
@@ -177,7 +178,7 @@ def extract_drawing_filepath
177178
parse_xml(sheet_rels_filepath).css("Relationship[@Id='#{drawing_rid}']").first.attributes['Target'].value
178179
end
179180

180-
def cell_id(column, use_simple_rows_format, row_number = '')
181+
def cell_id(column, use_simple_rows_format, row_number)
181182
return "#{column}#{row_number}" unless use_simple_rows_format
182183

183184
with_headers && headers ? headers[column] : column

spec/sheet_spec.rb

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,23 @@ def load_cell(rows, cell_name)
112112
context 'when enable with_headers property' do
113113
before { sheet.with_headers = true }
114114

115-
subject { sheet.simple_rows.to_a[1] }
116-
117115
it 'returns values by headers name' do
118116
expect(subject['HeaderA']).to eq 'value1'
119117
expect(subject['HeaderB']).to eq 'value2'
120118
expect(subject['HeaderC']).to eq 'value3'
121119
end
120+
121+
it 'returns headers correctly when called multiple times' do
122+
row = sheet.simple_rows.to_a[1]
123+
expect(row['HeaderA']).to eq 'value1'
124+
expect(row['HeaderB']).to eq 'value2'
125+
expect(row['HeaderC']).to eq 'value3'
126+
127+
row = sheet.simple_rows.to_a[1]
128+
expect(row['HeaderA']).to eq 'value1'
129+
expect(row['HeaderB']).to eq 'value2'
130+
expect(row['HeaderC']).to eq 'value3'
131+
end
122132
end
123133
end
124134
end

0 commit comments

Comments
 (0)