module Slippery module Processors # Take a flat list of elements, and wrap elements between
lines into # a sections. # # @example # HrToSections.new('body', H[:section]).call(doc) # class HrToSections def self.call(doc) self.new.call(doc) end def initialize(wrapper = H[:section], selector = 'body') @selector, @wrapper = selector, wrapper end def call(doc) doc.replace(@selector) { |element| hr_to_section(element) } end def hr_to_section(element) sections = [@wrapper] element.children.each do |child| if child.tag == :hr sections << @wrapper.merge_attrs(child) else sections[-1] = sections.last << child end end element.set_children(sections) end end end end