class CsvReader::Converter

Constants

CONVERTERS
DATE_MATCHER

A Regexp used to find and convert some common Date formats.

DATE_TIME_MATCHER

A Regexp used to find and convert some common DateTime formats.

HEADER_CONVERTERS

Private Class Methods

create_converters( converters ) click to toggle source
# File lib/csvreader/converter.rb, line 91
def self.create_converters( converters )
  new( converters, CONVERTERS )
end
create_header_converters( converters ) click to toggle source
# File lib/csvreader/converter.rb, line 87
def self.create_header_converters( converters )
  new( converters, HEADER_CONVERTERS )
end
new( converters, registry=CONVERTERS ) click to toggle source
# File lib/csvreader/converter.rb, line 97
def initialize( converters, registry=CONVERTERS )
     converters = case converters
                  when nil then []
                  when Array then converters
                  else [converters]
                  end

     @converters = []

     converters.each do |converter|
        if converter.is_a? Proc  # custom code block
           add_converter( registry, &converter)
        else   # by name
           add_converter( converter, registry )
        end
     end
end

Private Instance Methods

add_converter( name=nil, registry, &converter ) click to toggle source
# File lib/csvreader/converter.rb, line 138
def add_converter( name=nil, registry, &converter )
  if name.nil?  # custom converter
    @converters << converter
  else          # named converter
    combo = registry[name]
    case combo
    when Array  # combo converter
      combo.each do |converter_name|
        add_converter( converter_name, registry )
      end
    else   # individual named converter
      @converters << combo
    end
  end
end
convert( value, index_or_header=nil ) click to toggle source
# File lib/csvreader/converter.rb, line 119
def convert( value, index_or_header=nil )
  return value if value.nil?

  @converters.each do |converter|
      value = if converter.arity == 1  # straight converter
            converter.call( value )
          else
            ## note: for CsvReader pass in the zero-based field/column index (integer)
            ##       for CsvHashReader pass in the header/field/column name (string)
            converter.call( value, index_or_header )
          end
      break unless value.is_a?( String )  # note: short-circuit pipeline for speed
  end
  value  # final state of value, converted or original
end
empty?() click to toggle source
# File lib/csvreader/converter.rb, line 117
def empty?() @converters.empty?; end
to_a() click to toggle source
# File lib/csvreader/converter.rb, line 116
def to_a() @converters; end