Sha256: 3713e93be553a2c30f7f732964a107f6a048350595305f5aea9fc7b273a4a0f7

Contents?: true

Size: 1.25 KB

Versions: 2

Compression:

Stored size: 1.25 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)
      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])}

      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|
        # we always include the 'root' tag
        (path.map{|tag| tag.content[:slug] } - tags_given).count == 1
      end
    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_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.11 lib/nutmeg/tag_tree.rb
nutmeg-0.0.10 lib/nutmeg/tag_tree.rb