Sha256: 05d1cb72131b40ca3116472d342e3ca8c55ef73abc83b6e61f8b8c8702eca12a

Contents?: true

Size: 1.84 KB

Versions: 2

Compression:

Stored size: 1.84 KB

Contents

require_relative 'change_id/translate'

module TSV
  def self.change_key(source, new_key_field, identifiers: nil, one2one: false, merge: true, stream: false, keep: false, persist_identifiers: nil)
    source = TSV::Parser.new source if String === source
    identifiers = source.identifiers if identifiers.nil? and source.respond_to?(:identifiers)
    if identifiers && source.identify_field(new_key_field, strict: true).nil?
      identifiers = identifiers.nil? ? source.identifiers : identifiers
      if Array === identifiers
        identifiers = identifiers.select{|f| f.identify_field(new_key_field) }.last
      end
      new = source.attach(identifiers, fields: [new_key_field], insitu: false, one2one: true, persist_input: persist_identifiers)
      new = new.change_key(new_key_field, keep: keep, stream: stream, one2one: one2one, merge: merge)
      return new
    end

    fields = source.fields.dup - [new_key_field]
    fields.unshift source.key_field if keep
    transformer = TSV::Transformer.new source
    transformer.key_field = new_key_field
    transformer.fields = fields
    transformer.traverse key_field: new_key_field, fields: fields, one2one: one2one, unnamed: true do |k,v|
      [k, v]
    end

    stream ? transformer : transformer.tsv(merge: merge, one2one: one2one)
  end

  def change_key(*args, **kwargs)
    TSV.change_key(self, *args, **kwargs)
  end

  def self.change_id(source, source_id, new_id, identifiers: nil, one2one: false, insitu: false)
    source = TSV::Parser.new source if String === source

    identifiers = identifiers.nil? ? source.identifiers : identifiers

    new_fields = source.fields.dup
    new_fields[new_fields.index(source_id)] = new_id
    return source.attach(identifiers, fields: [new_id], insitu: insitu).slice(new_fields)
  end

  def change_id(*args, **kwargs)
    TSV.change_id(self, *args, **kwargs)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
scout-gear-10.7.3 lib/scout/tsv/change_id.rb
scout-gear-10.7.2 lib/scout/tsv/change_id.rb