Сделать делегированные методы частными
Я делегирую несколько методов, а также хочу, чтобы все они были закрытыми.
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
Я мог бы сказать private :+
, но я должен был бы сделать это для каждого метода. Есть ли способ вернуть список делегированных методов или делегировать создание частных методов?
Ответы
Ответ 1
Monkey patch Module
, чтобы добавить вспомогательный метод, точно так же, как ActionSupport
pack:
class Module
def private_delegate *methods
self.delegate *methods
methods.each do |m|
unless m.is_a? Hash
private(m)
end
end
end
end
# then
class Walrus
private_delegate :+, :to => :bubbles
def bubbles
0
end
end
Ответ 2
Поскольку delegate
возвращает список переданных символов, вы можете связать вызовы метода следующим образом:
private *delegate(:foo, :bar, :to => :baz)