class Polites::CodeGrouper

Take a list of items and collapse a collection of subsequent code blocks into a single one separated by newlines.

Public Instance Methods

call(items) click to toggle source

@param [Array<Polites::Node>] items @return [Array<Polites::Node>]

# File lib/polites/code_grouper.rb, line 9
def call(items)
  items
    .chunk { |i| i.is_a?(Block::CodeBlock) }.to_a
    .inject([]) do |acc, (k, contents)|
    acc + (k ? [combine(contents)] : contents)
  end
end

Private Instance Methods

combine(items) click to toggle source
# File lib/polites/code_grouper.rb, line 19
def combine(items)
  Block::CodeBlock.new(
    items
      .inject([]) { |acc, item| acc + item.children + [Text.new("\n")] }
      .slice(0..-2),
    items.first.syntax
  )
end