Похоже, вам нужен алгоритм переноса слов. Вот краткий и умный способ переноса слов в Ruby, который я нашел в списке рассылки ruby-talk (ссылка на кеш Google, потому что сайт, кажется, не работает):
puts $<.read.gsub(/\t/," ").gsub(/.{1,50}(?:\s|\Z)/){($& +
5.chr).gsub(/\n\005/,"\n").gsub(/\005/,"\n")}
Вот немного более симпатичная версия, завернутая в метод:
def wordwrap(str, columns=80)
str.gsub(/\t/, " ").gsub(/.{1,#{ columns }}(?:\s|\Z)/) do
($& + 5.chr).gsub(/\n\005/, "\n").gsub(/\005/, "\n")
end
end