diff options
-rw-r--r-- | lib/csv.rb | 9 | ||||
-rwxr-xr-x | test/csv/test_interface.rb | 13 |
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) |