Sha256: 2a01b1401938d1a5749a0d472c7650ec3fff8a43a5b9691471a7b980347d007b

Contents?: true

Size: 1.55 KB

Versions: 28

Compression:

Stored size: 1.55 KB

Contents

module Lookbook
  class TreeNode
    include Enumerable
    include Comparable

    delegate_missing_to :content

    attr_accessor :path, :content
    attr_reader :children

    def initialize(path = nil, content = nil, priority: 10000)
      @path = path.to_s
      @content = content
      @priority = priority
      @children = []
    end

    def id
      Utils.id(content_value(:id, path))
    end

    def name
      segments.last
    end

    def label
      content_value(:label, name.titleize)
    end

    def priority
      content_value(:priority, @priority)
    end

    def type
      content_value(:type, :directory)
    end

    def depth
      path.split("/").size
    end

    def add_child(name, content = nil, priority: 10000)
      children << TreeNode.new("#{path}/#{name}", content, priority: priority)
    end

    def has_child?(name)
      !!get_child(name)
    end

    def get_child(name)
      children.find { |child| child.name == name }
    end

    def content?
      content.present?
    end

    def each(&block)
      if block
        children.sort.each do |child|
          yield child
        end
      else
        to_enum(:each)
      end
    end

    def <=>(other)
      if content?
        content <=> (other.content? ? other.content : other)
      else
        [priority, label] <=> [other.priority, other.label]
      end
    end

    protected

    def content_value(method_name, fallback = nil)
      value = content.send(method_name) if content
      value || fallback
    end

    def segments
      path.split("/")
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
lookbook-2.3.4 lib/lookbook/support/tree_node.rb
lookbook-2.3.3 lib/lookbook/support/tree_node.rb
lookbook-2.3.2 lib/lookbook/support/tree_node.rb
lookbook-2.3.0 lib/lookbook/support/tree_node.rb
lookbook-2.2.2 lib/lookbook/support/tree_node.rb
lookbook-2.2.1 lib/lookbook/support/tree_node.rb
lookbook-2.2.0 lib/lookbook/support/tree_node.rb
lookbook-2.1.1 lib/lookbook/support/tree_node.rb
lookbook-2.1.0 lib/lookbook/support/tree_node.rb
lookbook-2.0.5 lib/lookbook/support/tree_node.rb
lookbook-2.0.4 lib/lookbook/support/tree_node.rb
lookbook-2.0.3 lib/lookbook/support/tree_node.rb
lookbook-2.0.2 lib/lookbook/support/tree_node.rb
lookbook-2.0.1 lib/lookbook/support/tree_node.rb
lookbook-2.0.0 lib/lookbook/support/tree_node.rb
lookbook-2.0.0.rc.3 lib/lookbook/support/tree_node.rb
lookbook-2.0.0.rc.2 lib/lookbook/support/tree_node.rb
lookbook-2.0.0.rc.1 lib/lookbook/support/tree_node.rb
lookbook-2.0.0.beta.9 lib/lookbook/support/tree_node.rb
lookbook-2.0.0.beta.8 lib/lookbook/support/tree_node.rb