From: arturo.herrero@... Date: 2018-01-16T12:21:31+00:00 Subject: [ruby-core:84889] [Ruby trunk Bug#14360] Regression CSV#open method for writing from Ruby 2.4.3 to 2.5.0 Issue #14360 has been updated by arturoherrero (Arturo Herrero). jeremyevans0 (Jeremy Evans) wrote: > This isn't a regression, it's an intentional bug fix. If you tell it to write the headers, it should write the headers even if there are no rows. See #9988 and r59640. If someone really wants the old broken behavior, maybe we can add a `write_headers: :unless_empty` option or something similar that only writes headers if there are rows. Thank you for clarifying this, I wasn't sure if it was intentional or not. ---------------------------------------- Bug #14360: Regression CSV#open method for writing from Ruby 2.4.3 to 2.5.0 https://bugs.ruby-lang.org/issues/14360#change-69595 * Author: arturoherrero (Arturo Herrero) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- I have noticed a different behaviour between Ruby <= 2.4.3 and Ruby 2.5.0 for the `#open` method. This issue is also open in its repository because it's not clear to me where is the appropriate place to open the issue, https://github.com/ruby/csv/issues/17 If you create an empty file for writing and you are not writing any line in that CSV file, Ruby <= 2.4.3 doesn't write anything (an empty file) but Ruby 2.5.0 writes the headers. ### Ruby <= 2.4.3 ```shell $ ruby -v ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin17] ``` ```ruby $ irb irb(main):001:0> require "csv" => true irb(main):002:0> CSV.open("ruby-2.4.3.csv", "wb", headers: ["name", "surname"], write_headers: true) { } => nil irb(main):003:0> `cat ruby-2.4.3.csv` => "" ``` ### Ruby 2.5.0 ```shell $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17] ``` ```ruby $ irb irb(main):001:0> require "csv" => true irb(main):002:0> CSV.open("ruby-2.5.0.csv", "wb", headers: ["name", "surname"], write_headers: true) { } => nil irb(main):003:0> `cat ruby-2.5.0.csv` => "name,surname\n" ``` --- In the examples, I'm using an empty block but in a real application probably you will have an `if` statement, something like this: ```ruby CSV.open(...) do |csv| csv << "hello" if condition end ``` -- https://bugs.ruby-lang.org/ Unsubscribe: