Sha256: 7fa37e463af763427d81eb62387e7b7db3dc96de73c695beba78756fb143cdef

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

module Nutmeg
  class TagTree
    attr_accessor :original

    def initialize(tree)
      raise "No valid data type" unless tree.class == Tree::TreeNode
      @original = tree
    end

    def subtree(slug)
      @original.each do |node|
        return Nutmeg::TagTree.new(node.detached_subtree_copy) if node.content[:slug] == slug
      end
    end

    def get_paths(tags_given, strict = false)
      start_nodes = @original.children.select{|l| tags_given.include?(l.content[:slug])}
      end_nodes = @original.each_leaf.select{|l| tags_given.include?(l.content[:slug])}

      result = end_nodes.select do |end_node|
        (end_node.parentage & start_nodes).count >= 1
      end.collect do |leaf|
        ([leaf] + leaf.parentage).reverse
      end.select do |path|
        (path.map{|tag| tag.content[:slug] } & tags_given).count >= 1
      end

      result.sort_by! do |path|
        ((path.map{|tag| tag.content[:slug] } & tags_given).count)
      end.reverse!
    end

    def get_paths_eager(tags_given)
      @original.children.select{|l| tags_given.include?(l.content[:slug])}.collect{|leaf| ([leaf] + leaf.parentage).reverse }
    end

    def get_path_to_node(tag_slug, path_so_far = [])
      node = @original.select{|node|node.content[:slug] == tag_slug}.first
      return get_recursive_path_to_node(node, [node]).reverse
    end

    def get_recursive_path_to_node(node, path_so_far)
      return path_so_far if node.parent.nil? || node.parent.content[:slug] == 'root'
      path_so_far << node.parent
      get_recursive_path_to_node(node.parent, path_so_far)
    end

    def get_paths_formatted(tags_given, seperator = "/")
      get_paths(tags_given).collect do |tags|
        tags.reject{|tag| tag.content[:slug] == "root"}.map{|node| node.content[:slug]}.join(seperator)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nutmeg-0.0.16 lib/nutmeg/tag_tree.rb
nutmeg-0.0.15 lib/nutmeg/tag_tree.rb