SaneCsv
This ensures that the CSV never returns nil when parsing.
Additionally, empty strings will not be quoted when generating CSV.
Installation
Install the gem and add to the application's Gemfile by executing:
$ bundle add sane_csv
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install sane_csv
Usage
require 'sane_csv'
CSV may return nil, but using SaneCsv ensures it never returns nil.
The default behavior of CSV:
require 'csv'
CSV.parse('a,,b')[0]
#=> ["a", nil, "b"]
To avoid returning nil, you need to specify the nil_value option:
require 'csv'
CSV.parse('a,,b', nil_value: "")[0]
#=> ["a", "", "b"]
When using SaneCsv:
require 'sane_csv'
CSV.parse('a,,b')[0]
#=> ["a", "", "b"]
If you have a special situation where you want to return nil, you can specify the nil_value option:
require 'sane_csv'
CSV.parse('a,,b', nil_value: nil)[0]
#=> ["a", nil, "b"]
Additionally, when generating CSV, empty strings are not unnecessarily quoted:
require 'sane_csv'
['a', '', 'b'].to_csv
#=> "a,,b\n"
If you have a specific reason to quote empty strings, you can specify quote_empty:
require 'sane_csv'
['a', '', 'b'].to_csv(quote_empty: true)
#=> "a,\"\",b\n"