Понятие "классы - это объекты" (насколько я понимаю) подразумевает, что все, что вы можете делать с объектом, вы можете делать с классом.
Это отличается от других языков программирования, где класс и определение класса являются особыми артефактами, отличными от объектов и часто недоступными для среды выполнения.
Например, в Ruby вы можете изменить любой объект во время выполнения, поскольку классы также являются объектами, вы можете изменять сам класс и добавлять методы во время выполнения, удалять методы или добавлять и удалять атрибуты во время выполнения.
Например:
$ irb
>> x = Object.new
=> #<Object:0x1011ce560>
>> x.to_s
=> "#<Object:0x1011ce560>"
>> undef to_s
=> nil
>> x.to_s
NoMethodError: undefined method `to_s' for #<Object:0x1011ce560>
from (irb):4
>>
Это невозможно на других языках программирования, где проводится различие между объектами и классами.
примечание: возможно, вам следует понять основные понятия Ruby, прежде чем переходить к метапрограммированию, так как это может сбить с толку то, что я бы сделал.