class Lookbook::Collection
def as_tree(filter_hidden: true)
def as_tree(filter_hidden: true) return self if hierarchy_depth > 0 return @tree if @tree.present? @tree = self.class.new candidates = filter_hidden ? visible_items : items candidates.each do |item| current = @tree if item.hierarchy_depth == 1 current.add(item) else item.parent_collections_names.each.with_index(1) do |name, i| target = current.get_or_create(name) if item.hierarchy_depth == i + 1 target.add(item) else current = target end end end end @tree end