Class: Perron::Resource::TableOfContent::Builder

Inherits:
Object
  • Object
show all
Defined in:
lib/perron/resource/table_of_content.rb

Instance Method Summary collapse

Instance Method Details

#build(headings) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/perron/resource/table_of_content.rb', line 42

def build(headings)
  parents = {0 => {children: []}}

  headings.each_with_object(parents[0][:children]) do |heading, _|
    parents.delete_if { |level, _| level >= heading.level }

    parent = parents[parents.keys.select { it < heading.level }.max || 0]

    (parent.is_a?(Hash) ? parent[:children] : parent.children) << heading

    parents[heading.level] = heading
  end
end