diff --git lib/csv.rb lib/csv.rb index 60b22e7..69783a8 100644 --- lib/csv.rb +++ lib/csv.rb @@ -1533,6 +1533,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 # @@ -1647,9 +1653,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 test/csv/test_interface.rb test/csv/test_interface.rb index d6bf470..658742c 100755 --- test/csv/test_interface.rb +++ test/csv/test_interface.rb @@ -291,6 +291,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)