Class: CSV::FieldsConverter
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
Enumerable
|
|
Inherits: | Object |
Defined in: | lib/csv/fields_converter.rb |
Overview
Note: Don’t use this class directly. This is an internal class.
Class Method Summary
-
.new(options = {}) ⇒ FieldsConverter
constructor
A
FieldsConverter
is a data structure for storing the fields converter properties to be passed as a parameter when parsing a new file (e.g.
Instance Attribute Summary
- #empty? ⇒ Boolean readonly
- #need_convert? ⇒ Boolean readonly private
- #need_static_convert? ⇒ Boolean readonly private
Instance Method Summary
Constructor Details
.new(options = {}) ⇒ FieldsConverter
A FieldsConverter
is a data structure for storing the fields converter properties to be passed as a parameter when parsing a new file (e.g. Parser
.new(@io, parser_options))
# File 'lib/csv/fields_converter.rb', line 13
def initialize(={}) @converters = [] @nil_value = [:nil_value] @empty_value = [:empty_value] @empty_value_is_empty_string = (@empty_value == "") @accept_nil = [:accept_nil] @builtin_converters_name = [:builtin_converters_name] @need_static_convert = need_static_convert? end
Instance Attribute Details
#empty? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/csv/fields_converter.rb', line 43
def empty? @converters.empty? end
#need_convert? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/csv/fields_converter.rb', line 80
def need_convert? @need_static_convert or (not @converters.empty?) end
#need_static_convert? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/csv/fields_converter.rb', line 76
def need_static_convert? not (@nil_value.nil? and @empty_value_is_empty_string) end
Instance Method Details
#add_converter(name = nil, &converter)
[ GitHub ]# 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
#builtin_converters (private)
[ GitHub ]# File 'lib/csv/fields_converter.rb', line 85
def builtin_converters @builtin_converters ||= ::CSV.const_get(@builtin_converters_name) end
#convert(fields, headers, lineno, quoted_fields)
[ GitHub ]# 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)
[ GitHub ]# File 'lib/csv/fields_converter.rb', line 39
def each(&block) @converters.each(&block) end