def collapse!
children.each(&:collapse!)
to_absorb = []
children.each do |group|
next unless can_absorb?(group)
to_absorb << group
end
to_absorb.each do |absorbable_group|
absorbable_row = absorbable_group.children.shift
children.delete(absorbable_group) and next unless absorbable_row
@cells.merge!(absorbable_row.cells)
i = children.index(absorbable_group)
children.delete(absorbable_group) if absorbable_group.children.empty?
insert_children(i, absorbable_row.children) if absorbable_row.children.any?
end
end