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

Version Path
lookbook-1.5.5 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.5.4 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.5.3 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.5.2 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.5.1 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.5.0 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.4.5 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.4.4 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.4.3 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.4.2 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.4.1 lib/lookbook/services/entities/entity_tree_builder.rb
lookbook-1.4.0 lib/lookbook/services/entities/entity_tree_builder.rb