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