Was mich im Moment noch stutzig macht ist die eigenartige If-Bediengung Das macht nicht sonderlich viel Sinn den leeren String hier zu verwenden, jeder String enthält den leeren String. Das ist als ob du " if true " schreiben würdest nur aufwendiger...
...
ich vermute mal, waffe.include?(val) ist Array#include?, laut Dokumentation hat String nichtmal eine include?-Funktion. Und ein leerer String als Element eines Array macht wieder Sinn.