Also, people always forget to throw NotImplemented errors which can lead to some fun to track down bugs if you make a typo sending a message. Which I guess is why you pretty much have to write tests for everything in ruby. This kind of stuff would be caught by a compiler in other languages.
Disclaimer: I don't buy into the idea of "message passing" or a lot of OOP. They're the microservices of programming languages.