Добрый день. Задача есть модуль код которого подмешивается в различные классы и содержит базовые функции, но в зависимости от класса в данном модуле должны появляться дополнительные методы.
Пример, который не работает:
module SuperAbility
define_method(:basic) do
puts 'i can some basic action'
end
@@additional_ability ||= :action
define_method(@@additional_ability) do
puts "i can make action: #{__method__}"
end
end
class Cow
@@additional_ability = :mooo
include SuperAbility
end
class Dragon
@@additional_ability = :fire
include SuperAbility
end
cow = Cow.new
cow.basic
cow.mooo
drag = Dragon.new
drag.basic
drag.fire
Желательно провернуть не загромождая код, желательно без @@ и @, можно использовать attr. Интересует именно с модулем.
Подскажите пожалуйста