summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/csv.rb9
-rwxr-xr-xtest/csv/test_interface.rb13
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/csv.rb b/lib/csv.rb
index 25f2bf35e6..45a087ff0f 100644
--- a/lib/csv.rb
+++ b/lib/csv.rb
@@ -1561,6 +1561,12 @@ class CSV
# track our own lineno since IO gets confused about line-ends is CSV fields
@lineno = 0
+
+ # make sure headers have been assigned
+ if header_row? and [Array, String].include? @use_headers.class and @write_headers
+ parse_headers # won't read data for Array or String
+ self << @headers
+ end
end
#
@@ -1677,9 +1683,8 @@ class CSV
#
def <<(row)
# make sure headers have been assigned
- if header_row? and [Array, String].include? @use_headers.class
+ if header_row? and [Array, String].include? @use_headers.class and !@write_headers
parse_headers # won't read data for Array or String
- self << @headers if @write_headers
end
# handle CSV::Row objects and Hashes
diff --git a/test/csv/test_interface.rb b/test/csv/test_interface.rb
index 0ae03b0184..f2c774f606 100755
--- a/test/csv/test_interface.rb
+++ b/test/csv/test_interface.rb
@@ -295,6 +295,19 @@ class TestCSV::Interface < TestCSV
end
end
+ def test_write_headers_empty
+ File.unlink(@path)
+
+ CSV.open( @path, "wb", headers: "b|a|c",
+ write_headers: true,
+ col_sep: "|" ) do |csv|
+ end
+
+ File.open(@path, "rb") do |f|
+ assert_equal("b|a|c", f.gets.strip)
+ end
+ end
+
def test_append # aliased add_row() and puts()
File.unlink(@path)