module Fluent::TextParser::TypeConverter

Constants

Converters

Public Class Methods

included(klass) click to toggle source
# File lib/fluent/parser.rb, line 124
def self.included(klass)
  klass.instance_eval {
    config_param :types, :string, default: nil
    config_param :types_delimiter, :string, default: ','
    config_param :types_label_delimiter, :string, default: ':'
  }
end

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/parser.rb, line 132
def configure(conf)
  super

  @type_converters = parse_types_parameter unless @types.nil?
end

Private Instance Methods

convert_type(name, value) click to toggle source
# File lib/fluent/parser.rb, line 140
def convert_type(name, value)
  converter = @type_converters[name]
  converter.nil? ? value : converter.call(value)
end
parse_types_parameter() click to toggle source
# File lib/fluent/parser.rb, line 145
def parse_types_parameter
  converters = {}

  @types.split(@types_delimiter).each { |pattern_name|
    name, type, format = pattern_name.split(@types_label_delimiter, 3)
    raise ConfigError, "Type is needed" if type.nil?

    case type
    when 'time'
      t_parser = TimeParser.new(format)
      converters[name] = lambda { |v|
        Converters[type].call(v, t_parser)
      }
    when 'array'
      delimiter = format || ','
      converters[name] = lambda { |v|
        Converters[type].call(v, delimiter)
      }
    else
      converters[name] = Converters[type]
    end
  }

  converters
end