Class: CSV::FieldsConverter

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/csv/fields_converter.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ FieldsConverter

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))


13
14
15
16
17
18
19
20
21
# 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 = options[:builtin_converters]
  @need_static_convert = need_static_convert?
end

Instance Method Details

#add_converter(name = nil, &converter) ⇒ Object


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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) ⇒ Object


47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/csv/fields_converter.rb', line 47

def convert(fields, headers, lineno)
  return fields unless need_convert?

  fields.collect.with_index do |field, index|
    if field.nil?
      field = @nil_value
    elsif 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
        field = converter[field, FieldInfo.new(index, lineno, header)]
      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) ⇒ Object


39
40
41
# File 'lib/csv/fields_converter.rb', line 39

def each(&block)
  @converters.each(&block)
end

#empty?Boolean

Returns:

  • (Boolean)

43
44
45
# File 'lib/csv/fields_converter.rb', line 43

def empty?
  @converters.empty?
end