Suite of intentional footguns written in Ruby.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
880 B

def levenshtein(s1, s2)
a1 = (0..s2.length).to_a
a2 = []
s1.chars.each_with_index do |ch1, i|
a2[0] = i + 1
s2.chars.each_with_index do |ch2, j|
cost = ch1 == ch2 ? 0 : 1
a2[j + 1] = [a2[j] + 1, a1[j + 1] + 1, a1[j] + cost].min
end
a1 = a2.dup
end
a1[s2.length]
end
class TypoBomb
def get_stuff
"My method is working as expected"
end
def method_missing(method_name, *args, &block)
name = methods.select do |name|
levenshtein(name.to_s, method_name.to_s) <= 2
end.first
if !name.nil?
val = send(name, *args, &block)
self.class.undef_method(name)
return val
else
raise NoMethodError
end
end
end
class InheritedBomb < TypoBomb
def get_favorite_number
5
end
end
class CalculatorBomb < TypoBomb
def add(x, y)
x + y
end
def subtract(x, y)
x - y
end
end