Bug #15662
closedFix CSV delegation to missing StringIO
Description
If you create a CSV from raw content like:
csv = CSV.new("h1,h2")
You'll get method missing when calling csv.path
but still, get true
when you call csv.respond_to?(:path)
.
This tricks 3rd party libraries like carrierwave which try to call path
on their input if it responds to it.
This stops me from passing CSV objects as StringIO's into carrierwave uploads, for example, but the problem can also be manifested in other 3rd party libraries, as responding to a method and returning a NoMethodError
when calling it is still an unexpected behavior.
I have gone through the CSV delegation scheme and made sure that every method that StringIO doesn't respond to returns a meaningful zero value and does not raise a NoMethodError
while used through a CSV Instance.
Updated by gsamokovarov (Genadi Samokovarov) over 5 years ago
I have opened a PR on GitHub's tracker with the changes: https://github.com/ruby/ruby/pull/2094
Updated by kou (Kouhei Sutou) over 5 years ago
- Status changed from Open to Assigned
- Assignee set to kou (Kouhei Sutou)
Could you use https://github.com/ruby/csv instead of ruby/ruby?
ruby/csv is the upstream repository.
Updated by gsamokovarov (Genadi Samokovarov) over 5 years ago
We resolved it in https://github.com/ruby/csv/pull/80. Thank you @kou (Kouhei Sutou) 🙇♂️!