Используя SimpleDelegator
, я создал несколько декораторов для добавления дополнительных функций к моим объектам.Мне нужно украсить объект дважды, как показано ниже:
Tracked.new(Audited.new(User.new))).save
Вот основная структура декоратора (ов):
class Tracked #or Audited
delegate :id, to: :__getobj__
def initialize(extened_object)
super(extened_object)
@extened_object = extened_object
end
def itself
__getobj__
end
def save
super
# the extended behavior
end
end
Я хочу получить доступ к классу User
от объекта.В Audited
, если я позвоню @extended_object.class
с Audited.new(User.new)).save
, я получу User
.В Tracked
, если я звоню @extended_object.class
с Tracked(Audited.new(User.new))).save
, вместо этого я получаю Audited
.
Как я могу получить класс extended_object
независимо от того, сколько раз я его украшал?