Last active
September 16, 2019 13:43
-
-
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 file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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