Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix CSV delegation to missing StringIO methods #80

Merged

Commits on Mar 14, 2019

  1. Fix CSV delegation to missing StringIO methods

    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.
    
    See https://github.com/carrierwaveuploader/carrierwave/blob/a91ab69fdd8052cdf5a5e48ef8baf40939e441fb/lib/carrierwave/sanitized_file.rb#L109-L123
    
    This stops me from passing `CSV` objects as `StringIO` 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 went 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.
    gsamokovarov committed Mar 14, 2019
    Configuration menu
    Copy the full SHA
    cb83cd7 View commit details
    Browse the repository at this point in the history