class Embulk::Filter::ExpandJsonArray

Public Class Methods

transaction(config, in_schema) { |task, out_columns| ... } click to toggle source
# File lib/embulk/filter/expand_json_array.rb, line 9
def self.transaction(config, in_schema, &control)
  # configuration code:
  task = {
    "json_column_name" => config.param("json_column_name", :string),
    "root" => config.param("root", :string),
    "expanded_column_name" => config.param("expanded_column_name", :string)
  }

  task['parse_target_column'] = in_schema.find{|c| c.name == task['json_column_name']}

  columns = [
    Column.new(nil, task["expanded_column_name"], :string),
  ]

  out_columns = in_schema + columns

  yield(task, out_columns)
end

Public Instance Methods

add(page) click to toggle source
# File lib/embulk/filter/expand_json_array.rb, line 42
def add(page)
  # filtering code:
  page.each do |record|
    expanded_columns = @json_path.on(record[@parse_target_column['index']]).flatten

    expanded_columns.each do |ec|
      page_builder.add(record + [ec])
    end
  end
end
close() click to toggle source
# File lib/embulk/filter/expand_json_array.rb, line 39
def close
end
finish() click to toggle source
# File lib/embulk/filter/expand_json_array.rb, line 53
def finish
  page_builder.finish
end
init() click to toggle source
# File lib/embulk/filter/expand_json_array.rb, line 28
def init
  # initialization code:
  @json_column_name = task["json_column_name"]
  @root = task["root"]
  @expanded_column_name = task["expanded_column_name"]

  @parse_target_column = task['parse_target_column']

  @json_path = JsonPath.new(@root)
end