Композиция на основе модулей в Ruby
Одна из самых крутых особенностей Ruby заключается в том, что вы можете реализовать композицию несколькими способами. Например, помимо классической реализации, в которой вы выстраиваете цепочку вложенных объектов, в Ruby также можно реализовать композицию на основе модулей (примесей). Я понимаю, что для многих разработчиков этот способ не является приемлемым, но тот факт, что именно эта концепция лежит в основе архитектуры плагинов таких гемов, как Roda и Shrine, заставляет меня задуматься и посмотреть на это иначе. И так как include - это обычный метод, а объекты в Ruby обладают собственным классом (Eigenclass), можно пойти ещё дальше и включить модуль для конкретного объекта: ``` module Insurance def price = super + (@price * 0.1).to_i end need_insurance = true phone = Phone.new(1200) phone.singleton_class.include(Insurance) if need_insurance phone.price # => 1395 ``` А как вы реализуете композицию в своих проектах? Знаете ли вы другие подходы, с помощью которых можно её реализовать?