Поскольку вы хотите сгруппировать по функциональным возможностям, вы можете объявить все свои методы, а затем объявить, какие из них являются защищенными и частными, используя защищенный, за которым следуют символы методов, которые вы хотите защитить, и то же самое для частных.
Следующий класс показывает, что я имею в виду. В этом классе все методы общедоступны, кроме bar_protected и bar_private, которые в конце объявлены защищенными и приватными.
class Foo
def bar_public
print "This is public"
end
def bar_protected
print "This is protected"
end
def bar_private
print "This is private"
end
def call_protected
bar_protected
end
def call_private
bar_private
end
protected :bar_protected
private :bar_private
end