class TableauTools::Anonymizer

Attributes

anonWords[R]
field[RW]
high[R]
input[RW]
low[R]
output[RW]

Public Class Methods

new() click to toggle source
# File lib/tableautools/utilities/anonymizer.rb, line 185
def initialize
  @anonWords = @@anonymousText.gsub(/\n/,' ').split
  @coded = {}
  @low   = 0
  @limit = @anonWords.length-1
  @rand  = Random.new
  @minWords  = 2 
  @maxWords  = 4
  @anonCSV   = CSV.open('Anonymized.csv','w')
  @anonCSV  << ['File - original','File - anon','Record #','Field','Value - original','Value - anon']
end

Public Instance Methods

anonymize(input, fields, output) click to toggle source
# File lib/tableautools/utilities/anonymizer.rb, line 197
def anonymize(input, fields,  output)
  puts "Anonymizing %-25s  to  %-25s  - %s " % [input, output, fields.inspect]
  raise 'The input file must be specified' if     input.nil?
  raise 'The input file must exist'        unless File.exist?(input)
  raise 'The field(s) to anonymize must be provided as a String or an array of Strings' unless fields.instance_of?(String) || fields.instance_of?(Array)
  @input    = input
  @output   = output
  @anonVals = {}
  csvFields = CSV.open(@input, &:readline) 
  output    = CSV.open(@output,'w')
  output << csvFields
  fields = [fields] if fields.is_a? String
  recNum = 0
  CSV.foreach(@input, :headers => true) do |row|
    fields.each do |field|
      unless row[field].nil?
        init = row[field]
        anon = anonWords(row[field])
        row[field] = anon
        @anonCSV << [@input,@output,recNum+=1,field,init,anon]
      end
    end
    output << row
  end
end
codeValue(value) click to toggle source
# File lib/tableautools/utilities/anonymizer.rb, line 234
def codeValue value
  if @codedWords[value].nil?
    @codedWords[value] = anonWords
  end
  @codedWords[value]
end