Sha256: da75f89c2e471507f7d48205cbd4f5b71fefca6513717a7c574f9c8f111f8636

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

module TSV
  def self.melt(tsv, key_field, header_field, fields, *info_fields, &block)
    dumper = TSV::Dumper.new :key_field => "ID", :fields => [key_field] + info_fields, :type => :list
    dumper.init
    TSV.traverse tsv, :into => dumper, :fields => info_fields do |k,values|
      values = [values] if tsv.type == :flat
      values = Misc.zip_fields(values) if tsv.type == :double

      res = []
      values.each_with_index do |value,i|
        info_values = if block_given?
                        new = block.call value
                        next if new.nil?
                        new
                      else
                        value
                      end
        
        info_values = [info_values] unless tsv.type == :double
        id = [k, i] * ":"
        res << [id, [k] + [info_values].flatten]
      end
      res.extend MultipleResult
      res
    end
  end

  def melt(header_field = nil, *info_fields, &block)
    info_fields = fields if info_fields.nil? || info_fields.empty?
    TSV.melt self, key_field, header_field, fields, *info_fields, &block
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rbbt-util-5.26.10 lib/rbbt/tsv/melt.rb