No procedural content generation => not a roguelike.
Not necessarily, it depends on how it's done. There is a wide area between having something have static dungeons, and having something be "truly random". By definition, truly random ends up looking like a mess.
What you want in something in between. You have a limited number of dungeon designs, but the game shuffles between these different designs. You might have only three designs, or you might have over 2,000 designs.
The way I figured it out is to create mini-levels, and have a state machine shuffle randomly between different levels. There seems be a lack of tutorials on it, is how to specifically do procedural randomness. Most of the few out there is either behind a paywall, or it's in some other language besides Ruby.
On the other hand, badly written random can look like this.
* * * * # * * * # * # *
* * * * * # * # * * * *
* * # * # * * * * # * *
* * * * * # * * # * * #
* * # * # * * # * * * #
* * # # * * # * * * # *
# * * * * * * * # * * *
* * # * * # * # * * # *
* * * # * * # * * * # *
* * # # * * * * * * # *
* # * * # * * * # # * *
* * # # * * * * # * # *
* * # * # * * * # * * *
* * # * * * * * * * * #
* # * * # * * # * * * #
* * # # * * # * * * * #
* * * # * * * * * * * *
# * * * * # # * * # * *
Not the kind of level I really get anything out of playing. And it creates more work for the programmer for people that is just beginning to code.