私はいくつかのメソッドを委任しており、それらすべてをプライベートにすることも望んでいます。
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
私は言うことができますprivate :+
が、私はそれぞれの方法のためにそれをしなければならないでしょう。委任されたメソッドのリストを返す方法、または委任されたメソッドにプライベートメソッドを作成させる方法はありますか?
私はいくつかのメソッドを委任しており、それらすべてをプライベートにすることも望んでいます。
class Walrus
delegate :+, :to => :bubbles
def bubbles
0
end
end
私は言うことができますprivate :+
が、私はそれぞれの方法のためにそれをしなければならないでしょう。委任されたメソッドのリストを返す方法、または委任されたメソッドにプライベートメソッドを作成させる方法はありますか?
渡されたシンボルのリストが返されるためdelegate
、次のようにメソッド呼び出しを連鎖させることができます。
private *delegate(:foo, :bar, :to => :baz)
パックModule
と同じように、ヘルパーメソッドを追加するモンキーパッチ:ActionSupport
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
Rails 6以降を使用している場合は、Tomas Valentのおかげで、プライベートオプションを渡して、委任されたメソッドをプライベートにすることができます。
delegate :method, to: :object, private: true