diff --git i/lib/csv.rb w/lib/csv.rb
index dca2a45b6a..e4ad55085c 100644
--- i/lib/csv.rb
+++ w/lib/csv.rb
@@ -687,8 +687,9 @@
# You pass your +str+ to read from, and an optional +options+ containing
# anything CSV::new() understands.
#
- def self.parse(*args, &block)
- csv = new(*args)
+ def self.parse(data, write_headers: nil, **options, &block)
+ raise ArgumentError.new("Cannot write headers when parsing") if write_headers
+ csv = new(data, **options)
return csv.each(&block) if block_given?
@@ -707,7 +708,8 @@
#
# The +options+ parameter can be anything CSV::new() understands.
#
- def self.parse_line(line, **options)
+ def self.parse_line(line, write_headers: nil, **options)
+ raise ArgumentError.new("Cannot write headers when parsing") if write_headers
new(line, options).shift
end
diff --git i/test/csv/test_csv_parsing.rb w/test/csv/test_csv_parsing.rb
index e65bbad92e..7e45a429ef 100755
--- i/test/csv/test_csv_parsing.rb
+++ w/test/csv/test_csv_parsing.rb
@@ -239,6 +239,29 @@
CSV.parse("a b d", col_sep: " "))
end
+ def test_parse_write_headers
+ data = "a,b,c"
+ headers = %w[A B C]
+ Tempfile.create(%w[parsing .csv]) do |f|
+ f.puts data
+ f.close
+ File.open(f.path) {|f|
+ assert_raise(ArgumentError) {
+ CSV.parse(f, write_headers: true, headers: headers)
+ }
+ assert_raise(ArgumentError) {
+ CSV.parse_line(f, write_headers: true, headers: headers)
+ }
+ }
+ end
+ assert_raise(ArgumentError) {
+ CSV.parse(data, write_headers: true, headers: headers)
+ }
+ assert_raise(ArgumentError) {
+ CSV.parse_line(data, write_headers: true, headers: headers)
+ }
+ end
+
private
def assert_parse_errors_out(*args)