class Embulk::LineGuessPlugin
def guess(config, sample)
def guess(config, sample) if config.fetch('parser', {}).fetch('charset', nil).nil? require 'embulk/guess/charset' charset_guess = Guess::CharsetGuessPlugin.new return charset_guess.guess(config, sample) end if config.fetch('parser', {}).fetch('newline', nil).nil? require 'embulk/guess/newline' newline_guess = Guess::NewlineGuessPlugin.new return newline_guess.guess(config, sample) end # TODO pure-ruby LineDecoder implementation? begin parser_task = config.param("parser", :hash, default: {}).load_config(Java::LineDecoder::DecoderTask) rescue # TODO log? p $! p $!.backtrace return DataSource.new end decoder = Java::LineDecoder.new(Java::ListFileInput.new([[sample.to_java]]), parser_task) sample_lines = [] while decoder.nextFile while line = decoder.poll sample_lines << line end unless sample.end_with?(parser_task.getNewline.getString) sample_lines.pop unless sample_lines.empty? # last line is partial end end return guess_lines(config, sample_lines); end
def guess_lines(config, sample_lines)
def guess_lines(config, sample_lines) raise NotImplementedError, "LineGuessPlugin#guess_lines(config, sample_lines) must be implemented" end