Не совсем уверен, какое решение вы ищете, но я бы начал в этом направлении, сначала сделайте дерево из вашего списка URL:
s = '/businesses
/businesses/food
/businesses/food/wendys
/businesses/food/wendys/chili
/businesses/food/wendys/fries
/businesses/food/wendys/chicken-nuggets
/businesses/pharmacy/cvs
/businesses/pharmacy/cvs/toothpaste
/businesses/pharmacy/cvs/toothpaste/brand'
h = {}
s.split("\n").map(&:strip).each do |row|
lh = h
row[1..-1].split('/').each do |item|
lh[item] ||= {}
lh = lh[item]
end
end
и затем распечатать его рекурсивно, без использования тегов> H3:
def rprint h, level=1
h.each do |k,v|
puts "<li><h#{level}>#{k}</h#{level}>"
unless v.empty?
puts "<ul>"
rprint(v, level == 3 ? 3 : level + 1)
puts "</ul>"
end
puts "</li>"
end
end
rprint h
Конечно, эта логика печати будет переходить к представлению, используя приличный шаблонный язык вместо того, чтобы составлять HTML, как это, но идея должна быть такой же.