class Lookbook::EntityTree
def children
def children @children ||= nodes.select { _1.depth == 1 }.sort end
def children_of(parent)
def children_of(parent) nodes.select do |node| node.depth == parent.depth + 1 && node.lookup_path.start_with?("#{parent.lookup_path}/") end end
def collect_ordered_entities(start_node)
def collect_ordered_entities(start_node) start_node.children.flat_map do |node| child_nodes = collect_ordered_entities(node) [node, child_nodes] end end
def initialize(leaf_nodes = [])
def initialize(leaf_nodes = []) @leaf_nodes = leaf_nodes @lookup_path = "" end
def navigable_nodes
def navigable_nodes ordered_nodes.select(&:navigable?) end
def next(node)
def next(node) nodes = navigable_nodes.filter(&:visible?) index = nodes.index(node) nodes[index + 1] unless node == nodes.last end
def nodes
def nodes @nodes ||= begin node_entities = [@leaf_nodes, *@leaf_nodes.map(&:ancestors)].flatten.uniq node_entities.sort_by { _1.lookup_path } end end
def ordered_nodes
def ordered_nodes @ordered_nodes ||= collect_ordered_entities(self).flatten end
def previous(node)
def previous(node) nodes = navigable_nodes.filter(&:visible?) index = nodes.index(node) nodes[index - 1] unless node == nodes.first end
def root? = true
def root? = true
def to_data
def to_data children.map(&:to_h) end