Project

General

Profile

Bug #11126

CSV field converters doesn't attempt to convert nil value.

Added by hanachin (Seiei Miyagi) over 2 years ago. Updated about 1 month ago.

Status:
Closed
Priority:
Normal
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-05-05 trunk 50430) [x86_64-darwin14]
[ruby-core:69088]

Description

following code behaves differently between ruby 2.2.2/trunk and 2.1.5.

require 'csv'
converter = lambda { |field| field.nil? }
p CSV.parse_line('nil,', converters: converter)
$ ruby -v
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
$ ruby csv.rb
[false, true]
$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
$ ruby csv.rb
[false, nil]

CSV header conversion changed at r45497 but it also affects field conversion.
https://github.com/ruby/ruby/pull/575

I attached a patch to revert the field conversion behavior to >= 2.1.

diff --git lib/csv.rb lib/csv.rb
index 54b820d..2edaf5a 100644
--- lib/csv.rb
+++ lib/csv.rb
@@ -2188,7 +2188,7 @@ def convert_fields(fields, headers = false)

     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 test/csv/test_data_converters.rb test/csv/test_data_converters.rb
index 89b6dd1..3a6f46f 100755
--- test/csv/test_data_converters.rb
+++ test/csv/test_data_converters.rb
@@ -175,6 +175,15 @@ def test_convert_with_custom_code_using_field_info_header
                   @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) )
csv.patch (1.18 KB) csv.patch hanachin (Seiei Miyagi), 05/07/2015 02:14 PM

Related issues

Related to Ruby trunk - Feature #12839: CSV - Give not nil but empty strings for empty fieldsOpen

Associated revisions

Revision 59643
Added by hsbt (Hiroshi SHIBATA) about 1 month ago

Fixed regression to convert blank value at r45497.

[Bug #11126]

History

#1 [ruby-core:69101] Updated by hsbt (Hiroshi SHIBATA) over 2 years ago

  • Assignee set to JEG2 (James Gray)

#2 [ruby-core:69102] Updated by hsbt (Hiroshi SHIBATA) over 2 years ago

  • Status changed from Open to Assigned

#3 Updated by shyouhei (Shyouhei Urabe) 9 months ago

  • Related to Feature #12839: CSV - Give not nil but empty strings for empty fields added

#4 [ruby-core:82441] Updated by hsbt (Hiroshi SHIBATA) about 1 month ago

  • Assignee changed from JEG2 (James Gray) to hsbt (Hiroshi SHIBATA)

#5 Updated by hsbt (Hiroshi SHIBATA) about 1 month ago

  • Status changed from Assigned to Closed

Applied in changeset trunk|r59643.


Fixed regression to convert blank value at r45497.

[Bug #11126]

Also available in: Atom PDF