Bug #14360
closedRegression CSV#open method for writing from Ruby 2.4.3 to 2.5.0
Description
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¶
$ ruby -v
ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin17]
$ 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¶
$ ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin17]
$ 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:
CSV.open(...) do |csv|
csv << "hello" if condition
end
Updated by shevegen (Robert A. Heiler) over 6 years ago
This issue is also open in its repository because it's not clear to me
where is the appropriate place to open the issue
Don't worry - the tracker here is still the official bug/feature/misc
tracker for the ruby language. Github issues are secondary and often
primarily useful for patchsets/pull requests. The ruby core team often
encourages people to write an issue tracker here at bugs.ruby-lang.org
rather than just on github alone.
To the issue at hand, I know way too little to really meaningfully comment
on it but I think that this may indeed be a regression. At the least I
can not think of a deliberate change to have different behaviour there.
https://www.ruby-lang.org/en/news/2017/12/25/ruby-2-5-0-released/ does
not list any notable change in the CSV module. Possibly a test can
ensure the functionality to remain the same (if it is a regression)
in this context.
Updated by normalperson (Eric Wong) over 6 years ago
shevegen@gmail.com wrote:
Issue #14360 has been updated by shevegen (Robert A. Heiler).
This issue is also open in its repository because it's not clear to me
where is the appropriate place to open the issueDon't worry - the tracker here is still the official bug/feature/misc
tracker for the ruby language. Github issues are secondary and often
primarily useful for patchsets/pull requests. The ruby core team often
encourages people to write an issue tracker here at bugs.ruby-lang.org
rather than just on github alone.
doc/maintainers.rdoc points to GH. On the other hand, some
people (myself) will not depend on proprietary APIs/software
like GH, so @hsbt (Hiroshi SHIBATA) or somebody else here can forward bugs to GH.
Updated by normalperson (Eric Wong) over 6 years ago
Eric Wong normalperson@yhbt.net wrote:
doc/maintainers.rdoc points to GH.
... for the CSV gem; as parts of the stdlib are separated into
different repos.
Updated by jeremyevans0 (Jeremy Evans) over 6 years ago
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.
Updated by arturoherrero (Arturo Herrero) over 6 years ago
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.
Updated by duerst (Martin Dürst) over 6 years ago
- Status changed from Open to Rejected