class Pry::Helpers::Table

def ==(other)

def ==(other)
  items == other.to_a
end

def _max_width(things)

def _max_width(things)
  things.compact.map(&:size).max || 0
end

def _rebuild_colorless_cache

def _rebuild_colorless_cache
  @colorless_cache = {}
  @plain_items = []
  items.map do |e|
    plain = Pry::Helpers::Text.strip_color(e)
    @colorless_cache[plain] = e
    @plain_items << plain
  end
end

def _recall_color_for(thing)

def _recall_color_for(thing)
  @colorless_cache[thing]
end

def _recolumn

def _recolumn
  @rows_without_colors = []
  return if items.size.zero?
  row_count = (items.size.to_f / column_count).ceil
  row_count.times do |i|
    row_indices = (0...column_count).map { |e| row_count * e + i }
    @rows_without_colors << row_indices.map { |e| @plain_items[e] }
  end
end

def column_count=(count)

def column_count=(count)
  @column_count = count
  _recolumn
end

def columns

def columns
  @rows_without_colors.transpose
end

def fits_on_line?(line_length)

def fits_on_line?(line_length)
  _max_width(rows_to_s(:no_color)) <= line_length
end

def initialize(items, args, pry_instance = Pry.new)

def initialize(items, args, pry_instance = Pry.new)
  @column_count = args[:column_count]
  @config = pry_instance.config
  self.items = items
end

def items=(items)

def items=(items)
  @items = items
  _rebuild_colorless_cache
  _recolumn
end

def rows_to_s(style = :color_on)

def rows_to_s(style = :color_on)
  widths = columns.map { |e| _max_width(e) }
  @rows_without_colors.map do |r|
    padded = []
    r.each_with_index do |e, i|
      next unless e
      item = e.ljust(widths[i])
      item.sub! e, _recall_color_for(e) if style == :color_on
      padded << item
    end
    padded.join(@config.ls.separator)
  end
end

def to_a

def to_a
  items.to_a
end

def to_s

def to_s
  rows_to_s.join("\n")
end