Skip to content

Instantly share code, notes, and snippets.

@AaronC81
Last active September 16, 2019 13:43
Show Gist options
  • Save AaronC81/e285be746d8bf56bc5e821feb426d7be to your computer and use it in GitHub Desktop.
Save AaronC81/e285be746d8bf56bc5e821feb426d7be to your computer and use it in GitHub Desktop.
Generate a gigantic Ruby class structure with valid YARD docs, designed for testing Sord
# This is a quick hacky script. It's not supposed to be good Ruby!
# Run with -W0 (because it uses top-level @@) and pipe into a file.
# You also need a valid /usr/share/dict/words file - "pacman -S words" on Arch-based distros
WORDS = File.read('/usr/share/dict/words')
.split("\n")
.select { |w| /^[A-Za-z]{3,}$/ === w }
.map(&:capitalize)
.freeze
CLASSES_TO_GENERATE = 1000
@@generated_classes = []
def stop?
@@generated_classes.length >= CLASSES_TO_GENERATE
end
def generate_method_name
selected_words = 3.times.map { WORDS.sample }
selected_words[0] = selected_words[0].downcase
selected_words.join
end
def generate_class_name
3.times.map { WORDS.sample }.join
end
def generate_class(i)
name = generate_class_name
@@generated_classes << name
puts "#{i}class #{name}"
5.times do
generate_something(i + ' ')
break if stop?
end
puts "#{i}end"
end
def generate_method(i)
puts [
"#{i}# Random method.",
"#{i}# @param [#{@@generated_classes.sample}] x The first parameter.",
"#{i}# @param [#{@@generated_classes.sample}] y The second parameter.",
"#{i}# @return [#{@@generated_classes.sample}] The return value.",
"#{i}def #{generate_method_name}(x, y); end"
]
end
def generate_something(i)
if rand < 0.15
generate_class(i)
else
generate_method(i)
end
end
loop do
generate_class ''
break if stop?
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment