Skip to content

Instantly share code, notes, and snippets.

@bertomartin
Created April 13, 2014 04:35
Show Gist options
  • Save bertomartin/10569361 to your computer and use it in GitHub Desktop.
Save bertomartin/10569361 to your computer and use it in GitHub Desktop.
require 'forgery'
require 'csv'
require 'blundersaur'
require 'pp'
original = CSV.open("original.csv", "w")
fudged = CSV.open("fudged.csv", "w")
headers = %w{id first_name last_name dob age street_address city state zip ssn}
original << headers
fudged << headers
100.times do |i|
male = rand(2) == 1
entity = {
'id' => (i + 1).to_s,
'first_name' => Forgery(:name).send(male ? :male_first_name : :female_first_name),
'last_name' => Forgery(:name).last_name,
'dob_date' => Forgery(:date).date(:past => true, :min_delta => 3650, :max_delta => 18250),
'street_address' => Forgery(:address).street_address,
'city' => Forgery(:address).city,
'state' => Forgery(:address).state,
'zip' => Forgery(:address).zip.to_s,
'ssn' => "%09d" % rand(1000000000)
}
entity['dob'] = entity['dob_date'].strftime("%Y-%m-%d")
# calculate age
dob = entity['dob_date']
date_1 = Date.today
date_2 = Date.new(dob.year, date_1.month, date_1.day)
entity['age'] = (date_1.year - dob.year - (date_2 >= dob ? 0 : 1)).to_s
row = entity.values_at(*headers)
original << row
row.each_with_index do |val, i|
if rand(5) == 0
row[i] = val.random_mistake
end
end
fudged << row
end
original.close
fudged.close
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment