class Embulk::Formatter::Geojson
Public Class Methods
transaction(config, schema) { |task| ... }
click to toggle source
# File lib/embulk/formatter/geojson.rb, line 9 def self.transaction(config, schema, &control) # configuration code: task = { "template_file" => config.param("template_file", :string), # required "encoding" => config.param("encoding", :string, default: 'UTF-8'), "identifier" => config.param("identifier", :string, default: 'id') } yield(task) end
Public Instance Methods
add(page)
click to toggle source
# File lib/embulk/formatter/geojson.rb, line 38 def add(page) # output code: page.each do |record| if @current_file == nil @current_file = file_output.next_file @current_file.write '{"type": "FeatureCollection", "features": ['.encode(@encoding) @current_file_size = 0 @is_first_row = true elsif @current_file_size > 32 * 1024 * 1024 @current_file.write ']}'.encode(@encoding) @current_file = file_output.next_file @current_file.write '{"type": "FeatureCollection", "features": ['.encode(@encoding) @current_file_size = 0 @is_first_row = true end schema = page.schema.map { |s| s.name } record_hash = Hash[schema.zip record] feature = @features.select do |f| f["properties"][@identifier].to_s == record_hash[@identifier] end raise "Invalid identifier" unless feature.length <= 1 if feature.length == 1 if @is_first_row @is_first_row = false else @current_file.write ','.encode(@encoding) end feature[0]["properties"] = feature[0]["properties"].merge(record_hash) @current_file.write JSON.dump(feature[0]).encode(@encoding) end end end
close()
click to toggle source
# File lib/embulk/formatter/geojson.rb, line 35 def close end
finish()
click to toggle source
# File lib/embulk/formatter/geojson.rb, line 75 def finish if @current_file != nil @current_file.write ']}'.encode(@encoding) end file_output.finish end
init()
click to toggle source
# File lib/embulk/formatter/geojson.rb, line 20 def init # initialization code: @template_file = task['template_file'] @encoding = task['encoding'] @identifier = task['identifier'] @template_json = JSON.parse(File.read(@template_file)) @features = @template_json["features"] # your data @current_file == nil @current_file_size = 0 @is_first_row = true end