Метапрограммирование как и может помочь структурировать код, и увеличить производительность. Допустим, у вас есть модуль (консерн), добавляющий некоторую функциональность для разных объектов. Назовем их объектами и субъектами.
В одном классе может быть
include MyModule
act_as_object
В другом
include MyModule
act_as_subject
В методах act_as_object и act_as_subject уже создаем нужные наборы методов
module MyModule
def act_as_object
define_method :obj_meth_1 do; end
define_method :obj_meth_2 do; end
end
def act_as_subject
define_method :subj_meth_1 do; end
define_method :subj_meth_2 do; end
end
end
Таким образом нужная для разных моделей функциональность собирается в одном месте, а при подключении модуля можно выбирать, какие конкретно методы в них добавлять.