aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/csv.rb2
-rwxr-xr-xtest/csv/test_data_converters.rb9
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/csv.rb b/lib/csv.rb
index 20c9f152a8..14025c1cd1 100644
--- a/lib/csv.rb
+++ b/lib/csv.rb
@@ -2207,7 +2207,7 @@ class CSV
fields.map.with_index do |field, index|
converters.each do |converter|
- break if field.nil?
+ break if headers && field.nil?
field = if converter.arity == 1 # straight field converter
converter[field]
else # FieldInfo converter
diff --git a/test/csv/test_data_converters.rb b/test/csv/test_data_converters.rb
index e274b2b10b..0786ca6d0f 100755
--- a/test/csv/test_data_converters.rb
+++ b/test/csv/test_data_converters.rb
@@ -176,6 +176,15 @@ class TestCSV::DataConverters < TestCSV
@parser.shift.fields )
end
+ def test_custom_converter_with_blank_field
+ converter = lambda { |field| field.nil? }
+ row = nil
+ assert_nothing_raised(Exception) do
+ row = CSV.parse_line('nil,', converters: converter)
+ end
+ assert_equal([false, true], row);
+ end
+
def test_shortcut_interface
assert_equal( ["Numbers", ":integer", 1, ":float", 3.015],
CSV.parse_line(@data, converters: :numeric) )