class Shoulda::Matchers::Paragraph

@private

def combine_list_item_lines(lines)

def combine_list_item_lines(lines)
  lines.reduce([]) do |combined_lines, line|
    if line.list_item?
      combined_lines << line
    else
      combined_lines.last << (' ' + line).squeeze(' ')
    end
    combined_lines
  end
end

def combine_paragraph_into_one_line

def combine_paragraph_into_one_line
  paragraph.gsub(/\n/, ' ')
end

def initialize(paragraph, indent: 0)

def initialize(paragraph, indent: 0)
  @paragraph = Text.new(paragraph)
  @indent = indent
end

def lines

def lines
  paragraph.split("\n").map { |line| Text.new(line) }
end

def wrap

def wrap
  if paragraph.indented?
    lines
  elsif paragraph.list_item?
    wrap_list_item
  else
    wrap_generic_paragraph
  end
end

def wrap_generic_paragraph

def wrap_generic_paragraph
  Line.new(combine_paragraph_into_one_line, indent: indent).wrap
end

def wrap_lines(lines)

def wrap_lines(lines)
  lines.map { |line| Line.new(line, indent: indent).wrap }
end

def wrap_list_item

def wrap_list_item
  wrap_lines(combine_list_item_lines(lines))
end