Sha256: 62e17dcd16a55be55725153dbcfbd45b76895e7a59d94720b23e91d8bf96778b

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 KB

Contents

module Brief
  class Tree
    def initialize(nodes)
      @nodes = nodes
    end

    def find element_by_id
      elements.detect {|el| el.id == element_by_id }
    end

    def elements
      @elements ||= begin
                      @nodes.map do |node|
                        only      = node.except(:children)

                        visitor = lambda do |child|
                          c_only      = child.except(:children)
                          g_children  = Array(child[:children])
                          g_children  = nil if g_children.length == 0

                          g_children.each {|gchild| gchild.parent_id = c_only.id}

                          [c_only, g_children].compact
                        end

                        children = Array(node[:children]).map(&visitor).flatten
                        children.each {|child| child.parent_id ||= only.id }

                        children = nil if children.length == 0

                        [only, children].compact
                      end

                    end.flatten
    end

    def level level=1
      elements.select {|el| el.level == level }
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
brief-0.0.2 lib/brief/tree.rb