Skip to content

Instantly share code, notes, and snippets.

@criess
Last active January 16, 2018 16:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save criess/fa1d29eba245972ea40f7ec058e04e3e to your computer and use it in GitHub Desktop.
Save criess/fa1d29eba245972ea40f7ec058e04e3e to your computer and use it in GitHub Desktop.
require 'digest'
require 'yaml'
require_relative 'randomer.rb'
count = ARGV.find do |arg|
arg.match(/count=/)
end.to_s.scan(/[0-9]+/)[0].to_i
mode = ARGV.find do |arg|
arg.match(/mode=/)
end.to_s.scan(/[a-z]+/)[1].to_s
if %w[address name].include?(mode.downcase)
case mode
when "address"
gkey = ARGV.find do |arg|
arg.match(/gkey=/)
end.to_s.scan(/[A-Za-z0-9-]+/)[1].to_s
generator = RandomAddress.set_api_key!(gkey)
when "name"
generator = RandomName
end
else
$stderr << "mode must be set (via mode=[address|name])" << "\n"
exit 1
end
collection = []
count.times do |time|
object = nil
while !object || (
collection.find do |compare|
Digest::MD5.hexdigest(compare.to_s) == Digest::MD5.hexdigest(object.to_s)
end
) do
if object
$stderr << "DUPLICATE #{object.to_s}" << "\n"
end
object = begin
generator.new.attributes
rescue NoMethodError
nil
end
end
collection.push object
end
puts collection.to_yaml
#!/usr/bin/env ruby
require 'yaml'
require 'digest'
require 'fileutils'
begin
dir = ARGV.find do |arg|
arg.match(/dir=/)
end.to_s.scan(/=.+/)[0][1..-1]
raise "non-existing directory `#{dir}'" unless Dir.exists?(dir)
rescue
$stderr << "Exit with error: #{$!.message} (from #{$!.backtrace[0]})" << "\n"
exit
end
yamls = Dir.glob(File.join dir, "*.yml")
hashed = {}
yamls.each do |file|
YAML.load_file(file).each do |node|
dig = Digest::SHA1.hexdigest node.to_yaml
$stderr << "DUPLICATE: #{node}" << "\n" if hashed[dig]
hashed[dig] = node unless hashed[dig]
end
end
$stderr << "OUTPUT #{hashed.size} entries" << "\n"
puts(hashed.values.sort do |x,y|
x["address_zip"].to_i <=> y["address_zip"].to_i
end.to_yaml)
class RndBase
def attributes
instance_variables.inject({}) do |hash, i|
hash[i.to_s.gsub(/^@/,"")] = instance_variable_get(i) unless i.match(/^@_/)
hash
end
end
end
class RandomAddress < RndBase
@@api_key = "api_key_not_set"
class << self
def set_api_key!(key)
@@api_key = key
self
end
end
def initialize
extremes_lat = (47270834..55059166)
extremes_lng = (5866944..15043611)
german_address = nil
find_count = 0
while !german_address
lng = rand(extremes_lng).to_s.gsub(/(.*)([0-9]{6})$/, "\\1.\\2")
lat = rand(extremes_lat).to_s.gsub(/(.*)([0-9]{6})$/, "\\1.\\2")
res = JSON.parse(
Net::HTTP.get(
URI.parse "https://maps.googleapis.com/maps/api/geocode/json?latlng=#{lat},#{lng}&result_type=street_address&key=#{@@api_key}"
)
)
german_address = res["results"].find do |entry|
entry["formatted_address"].match(/Germany$/)
end
find_count +=1
end
@address_snumber = german_address["address_components"].find do |part|
part["types"].include?("street_number")
end["long_name"].to_s.downcase
@address_street = german_address["address_components"].find do |part|
part["types"].include?("route")
end["long_name"].to_s
@address_city = german_address["address_components"].find do |part|
part["types"].include?("locality")
end["long_name"].to_s
@address_zip = german_address["address_components"].find do |part|
part["types"].include?("postal_code")
end["long_name"].to_s
end
end
class RandomName < RndBase
MAIL_DOMAIN = "@testaddress.pfdev.de"
def initialize
@_first_name_female = %w[
Lara
Michelle
Nina
Chiara
Jasmin
Vanessa
Leonie
Lea
Alena
Saskia
Laura
Celina
Phoebe
Katharina
Marie
Sophie
Svenja
Chantal
Sarah
Emily
Julia
Lisa
Melissa
Emma
Jacqueline
Aimee
Nele
Lena
Samira
Sonnhild
Tabea
Hannah
Moana
Jessica
Denise
Alessa
Freia
Lilly
Tamara
Annika
Nadine
Maren
Kim
Sabrina
Heidrun
Joelina
Ramona
Anna
Sonngard
Lorena
Giuliana
Jennifer
Louisa
Tanja
Nathalie
Naomi
Vivien
Alyssa
Romy
Doreen
Andrea
Luna
Luana
Hiltrud
Sophia
Samantha
Svea
Corinna
Janina
Kimberly
Luisa
Milena
Paula
Ronja
Verena
Amelie
Larissa
Maja
Maureen
Alicia
Emilie
Rebecca
Alina
Emilia
Celine
Jule
Maria
Carmen
Patricia
Yvonne
Stella
Cheyenne
Maya
Reinhild
Zoe
Johanna
Antonia
Jana
Mia
Dominique
Lana
Pia
Hilde
Paulina
Hildegard
Desiree
Noemi
Lotta
Katrin
Sonja
Sina
Sara
Lina
Lilli
Maike
Dana
Livia
Fabienne
Anastasia
Hanna
Miriam
Klara
Colleen
Benita
Aaliyah
Pauline
Coleen
Franziska
Daria
Victoria
Mareike
Malin
Josephine
Allegra
Carina
Angelina
Fee
Emely
Clara
Lynn
Annalena
Amy
Imogen
Alissa
Elisa
Luca
Alexandra
Kira
Julie
Aurora
Madita
Joana
Theresa
Thorgard
Linnea
Josie
Joelle
Charlotte
Emelie
Melina
Lavinia
Joyce
Linda
Natalie
Leona
Madleen
Christina
Janine
Chloe
Elena
Sigru
Selina
Giulia
Merle
Finja
Sanne
Henritte
Hedwi
Judith
Romina
Aileen
Marlne
Irmgard
Magdlena
Phila
Vivienn
Valerie
Jolina
Laurn
Sofia
Marina
Lucy
Flora
Carlotta
Tabith
Alish
].shuffle.first
@_first_name_male = %w[
Jan
Luca
Leon
Manuel
Alexander
Nico
Daniel
Yannick
Justin
Rudolf
Pascal
Noah
Marcel
Kevin
Lucas
Joshua
Jonas
Lukas
Maurice
Flemming
Paul
Tobias
Eugen
Tom
Simon
Maximilian
Fabian
Dennis
Julian
Robin
Adrian
Marco
Michael
Marc
Tim
Reinhard
Soeren
Benjamin
Calvin
Raphael
Nicolas
Thomas
Cedric
Arne
Max
Heinrich
Leandro
Linus
Ole
Aaron
Lauro
Finn
Samuel
Felix
Sven
Niklas
Christian
Patrick
David
Dario
Jeremy
Frank
Ben
Mario
Oliver
Marius
Florian
Sascha
Laurin
Damian
Fabio
Timo
Keanu
Jannis
Markus
Joel
Richard
Lars
Kilian
Sebastian
Yannik
Moritz
Sean
Marten
Gianluca
Sandro
Elias
Andre
Stefan
Martin
Fynn
Philipp
Pierre
Alessio
Nicholas
Luis
Raimund
Lasse
Niko
Dominik
Liam
Noel
Johannes
Friedrich
Mika
Bastian
Meiko
Fabrizio
Marlon
Levi
Ruben
Malte
Flavio
Hermann
Jannik
Eric
Marcello
Hauke
Romeo
Erik
Torsten
Jerome
Rico
Jakob
Devin
Hannes
Nils
Ramon
Anton
Nick
Justus
Louis
Valentin
Rene
Bjarne
Lennart
Thorsten
Steve
Riccardo
Leo
Nicolai
Ralf
Alessandro
Rainer
Neo
Danny
Jaden
Jonathan
Claudio
Robert
Leander
Torben
Philip
Raoul
Kjell
Konstantin
Kai
Antonio
Mirko
Carlos
Gabriel
Roman
Jamie
Luke
Otto
Christopher
Peter
Dustin
Tristan
Joschua
Eckehard
Silas
Levin
Vincent
Raven
Leonard
Hendrik
Niclas
Luka
Paolo
Emil
Benedict
Youri
Jasper
Andrew
Oskar
Thorben
Matteo
Maxime
Helge
Michel
Tino
Miguel
Jens
Heiko
Etienne
Jacob
Roland
Alex
].shuffle.first
@_double_name = (1..100).to_a.shuffle.first > 85
@name = %w[
Albrecht
Arndt
Ackermann
Adam
Arnold
Becker
Bauer
Braun
Busch
Baumann
Cremer
Clemens
Christ
Conrad
Caro
Daniel
Dahmen
Dietrich
Dambach
Decker
Esser
Engels
Engel
Ernst
Eckert
Fischer
Fuchs
Frank
Franke
Friedrich
Guenther
Gross
Gerlach
Giesen
Grimm
Hoffmann
Hartmann
Hahn
Hofmann
Herrmann
Issel
Ippers
Isenberg
Ihle
Ingenhoven
Jansen
Jung
Jaeger
Janssen
Jacobs
Klein
Koch
Krause
Krueger
Kaiser
Lange
Lehmann
Lang
Ludwig
Lorenz
Mueller
Meyer
Meier
Moeller
Mertens
Neumann
Nowak
Neuhaus
Nagel
Nolte
Otto
Ott
Otten
Ostermeier
Ostermann
Peters
Pohl
Probst
Puetz
Pfeiffer
Quast
Quint
Quack
Quandt
Quadflieg
Richter
Roth
Reuter
Roemer
Riedel
Schmidt
Schmitz
Schneider
Schulz
Schaefer
Thiel
Thomas
Tillmann
Thelen
Thoma
Urban
Ulrich
Unger
Ullrich
Utz
Vogt
Vogel
Voigt
Vieten
Voelker
Weber
Wagner
Wolf
Werner
Weiss
Yilmaz
Yildiz
Yildirim
Yavuz
Yueksel
Zimmermann
Ziegler
Zander
Zimmer
Zeiler
].shuffle.inject("") do |str, entry|
if @_double_name
if str.match(/-/)
break str
else
if str.empty?
str = entry
else
str = str + "-" + entry
end
end
else
break entry
end
str
end
@gender = ['m','f'].shuffle.first
@first_name = @gender == 'f' ? @_first_name_female : @_first_name_male
@email = @first_name.gsub(/[^a-z]/i,"").downcase <<
"." <<
@name.gsub("-",".").gsub(/[^a-z\.]/i,"").downcase <<
MAIL_DOMAIN
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment