class Lookbook::EntityTreeBuilder
def call
def call root_node = TreeNode.new entities.each do |entity| current_node = root_node path_segments = parse_segments(entity.logical_path) path_segments.each.with_index(1) do |segment, i| name, position_prefix = segment content = entity if entity.depth == i # entities are always on the leaf nodes current_node.add_child(name, content, position: position_prefix) unless current_node.has_child?(name) current_node = current_node.get_child(name) if content && content.type == :preview content.visible_examples.each do |example| current_node.add_child(example.name, example) end end end end root_node end