module Column
Column — IRC-aware multi-column text layout for list output. Public: format, auto_column_count Depends: TextAlign Tests: test/lib/column_test.rb
Constants
- DEFAULT_GAP
- DEFAULT_WIDTH
Public Instance Methods
Source
# File lib/column.rb, line 35 def auto_column_count(items, width:, gap: DEFAULT_GAP) max_len = items.map { |item| TextAlign.plain_length(item) }.max cell_width = max_len + gap return 1 if cell_width <= 0 [[width / cell_width, 1].max, items.length].min end
Source
# File lib/column.rb, line 16 def format(items, columns: nil, width: DEFAULT_WIDTH, gap: DEFAULT_GAP) names = Array(items).map(&:to_s).reject(&:empty?) return [] if names.empty? col_count = columns || auto_column_count(names, width: width, gap: gap) col_count = [[col_count, 1].max, names.length].min row_count = (names.length.to_f / col_count).ceil col_width = names.map { |name| TextAlign.plain_length(name) }.max row_count.times.map do |row| cells = col_count.times.map do |col| idx = col * row_count + row item = names[idx] item ? TextAlign.pad(item, col_width, align: :left) : "" end cells.join(" " * gap).rstrip end.reject(&:empty?) end