Используя частный или защищенный действительно не делают так многого в Ruby. Можно звонить, отправляют на любом объекте и используют любой метод, который он имеет.
class Foo
def Foo.bar(my_instance, n)
my_instance.send(:plus, n)
end
end
Можно сделать это, поскольку Samuel показал, но это действительно обходит проверки OO...
В Ruby можно отправить закрытые методы только для того же объекта и защищенный только к объектам того же класса. Статические методы находятся в метаклассе, таким образом, они находятся в другом объекте (и также другом классе) - таким образом, Вы не можете сделать, поскольку требуется использовать или частный или защищенный.
Вы могли также использовать instance_eval
class Foo
def self.bar(my_instance, n)
my_instance.instance_eval { plus(n) }
end
end