Sha256: 6762ff737cb67750c8804adf083addd10e3f0bef61aa8517d08eabf3f372599c
Contents?: true
Size: 1.29 KB
Versions: 12
Compression:
Stored size: 1.29 KB
Contents
module Lookbook class EntityTreeBuilder < Service attr_reader :include_hidden def initialize(entities, include_hidden: false) @entities = entities.to_a @include_hidden = include_hidden end 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 def parse_segments(path) path.split("/").map do |segment| unless segment.start_with?(".") position, name = PositionPrefixParser.call(segment) [name, position || 10000] end end.compact end def entities include_hidden ? @entities : @entities.select(&:visible?) end end end
Version data entries
12 entries across 12 versions & 1 rubygems