# class CSV::FieldsConverter

Note: Don’t use this class directly. This is an internal class.

### Public Class Methods

new(options={}) click to toggle source

A `CSV::FieldsConverter` is a data structure for storing the fields converter properties to be passed as a parameter when parsing a new file (e.g. `CSV::Parser.new`(@io, parser_options))

    # File lib/csv/fields_converter.rb, line 13
    def initialize(options={})
      @converters = []
      @nil_value = options[:nil_value]
      @empty_value = options[:empty_value]
      @empty_value_is_empty_string = (@empty_value == "")
      @accept_nil = options[:accept_nil]
      @builtin_converters_name = options[:builtin_converters_name]
      @need_static_convert = need_static_convert?
    end

### Public Instance Methods

add_converter(name=nil, &converter) click to toggle source

    # File lib/csv/fields_converter.rb, line 23
    def add_converter(name=nil, &converter)
      if name.nil?  # custom converter
        @converters << converter
      else          # named converter
        combo = builtin_converters[name]
        case combo
        when Array  # combo converter
          combo.each do |sub_name|
            add_converter(sub_name)
          end
        else        # individual named converter
          @converters << combo
        end
      end
    end

convert(fields, headers, lineno, quoted_fields) click to toggle source

    # File lib/csv/fields_converter.rb, line 47
    def convert(fields, headers, lineno, quoted_fields)
      return fields unless need_convert?

      fields.collect.with_index do |field, index|
        if field.nil?
          field = @nil_value
        elsif field.is_a?(String) and field.empty?
          field = @empty_value unless @empty_value_is_empty_string
        end
        @converters.each do |converter|
          break if field.nil? and @accept_nil
          if converter.arity == 1  # straight field converter
            field = converter[field]
          else                     # FieldInfo converter
            if headers
              header = headers[index]
            else
              header = nil
            end
            quoted = quoted_fields[index]
            field = converter[field, FieldInfo.new(index, lineno, header, quoted)]
          end
          break unless field.is_a?(String)  # short-circuit pipeline for speed
        end
        field  # final state of each field, converted or original
      end
    end

each(&block) click to toggle source

    # File lib/csv/fields_converter.rb, line 39
    def each(&block)
      @converters.each(&block)
    end

empty?() click to toggle source

    # File lib/csv/fields_converter.rb, line 43
    def empty?
      @converters.empty?
    end

### Private Instance Methods

builtin_converters() click to toggle source

    # File lib/csv/fields_converter.rb, line 85
    def builtin_converters
      @builtin_converters ||= ::CSV.const_get(@builtin_converters_name)
    end

need_convert?() click to toggle source

    # File lib/csv/fields_converter.rb, line 80
    def need_convert?
      @need_static_convert or
        (not @converters.empty?)
    end

need_static_convert?() click to toggle source

    # File lib/csv/fields_converter.rb, line 76
    def need_static_convert?
      not (@nil_value.nil? and @empty_value_is_empty_string)
    end