class Embulk::Parser::Unpack

Public Class Methods

transaction(config) { |task, columns| ... } click to toggle source
# File lib/embulk/parser/unpack.rb, line 7
def self.transaction(config, &control)
  decoder_task = config.load_config(Java::LineDecoder::DecoderTask)

  # configuration code:
  task = {
    "decoder" => DataSource.from_java(decoder_task.dump),
    "format" => config.param("format", :string),
    "strip_whitespace" => config.param("strip_whitespace", :bool, default: true),
  }

  columns = []
  schema = config.param("columns", :array, default: [])
  schema.each do |column|
    name = column["name"]
    type = column["type"].to_sym
    columns << Column.new(nil, name, type)
  end

  yield(task, columns)
end

Public Instance Methods

init() click to toggle source
# File lib/embulk/parser/unpack.rb, line 28
def init
  @format = task["format"]
  @decoder = task.param("decoder", :hash).load_task(Java::LineDecoder::DecoderTask)
  @strip_whitespace = task["strip_whitespace"]
end
run(file_input) click to toggle source
# File lib/embulk/parser/unpack.rb, line 35
def run(file_input)
  decoder = Java::LineDecoder.new(file_input.to_java, @decoder)

  while decoder.nextFile
    while line = decoder.poll
      process_line(line)
    end
  end

  page_builder.finish
end

Private Instance Methods

process_line(line) click to toggle source
# File lib/embulk/parser/unpack.rb, line 49
def process_line(line)
  values = line.unpack(@format)
  values.map(&:strip!) if @strip_whitespace
  page_builder.add(values)
end